Comparar commits

...

85 Commits

Autor SHA1 Mensagem Data
Corey Johnson d2d63d3241 Merge pull request #2431 from atom/cj-add-tokenized-event
Use tokenized event to determine tab style
2014-05-29 15:19:14 -07:00
Corey Johnson 4840987082 Add overlayer class to ReactEditorView
Closed #2442
2014-05-29 15:16:48 -07:00
Corey Johnson 249a14704b 📝 Fix typo in docs 2014-05-29 15:16:43 -07:00
Kevin Sawicki cf64d80abe Upgrade to tabs@0.41 2014-05-29 15:14:14 -07:00
Ben Ogle 5e511ca6c6 Typo! 2014-05-29 15:02:58 -07:00
Kevin Sawicki c4a547a9ea Upgrade to bracket-matcher@0.41.0 2014-05-29 12:44:26 -07:00
Kevin Sawicki b936e126da Upgrade to atom-keymap 0.26
This added support for custom number pad keybindings so num-enter
is now mapped to the editor:newline command and the core:confirm
command.
2014-05-29 11:46:58 -07:00
Kevin Sawicki 5418e74fb9 Upgrade to bracket-matcher@0.40.0 2014-05-29 11:13:31 -07:00
Corey Johnson 40a2ed3703 Merge pull request #2364 from themaninthesuitcase/cp-projectRelativeTabPath
Update getLongTitle to be project relative
2014-05-29 09:51:45 -07:00
Kevin Sawicki 67c8de623d Remove empty ca setting
npm 1.4 is a requirement now so this workaround is no longer needed.
2014-05-29 09:26:18 -07:00
Kevin Sawicki bf7c14e6f3 Upgrade to first-mate 1.6 2014-05-29 09:14:21 -07:00
Kevin Sawicki 512a50814b Upgrade to language-ruby@0.26.0 2014-05-29 09:04:15 -07:00
Kevin Sawicki 3c251dbe56 Upgrade to deprecation-cop@0.6 2014-05-29 08:51:20 -07:00
Kevin Sawicki eae33be515 Upgrade to minidump 0.6 2014-05-28 20:19:26 -07:00
Kevin Sawicki a343e4b9f7 Merge pull request #2432 from atom/ks-install-npm-in-build-folder-on-ci
Install npm in build folder on CI
2014-05-28 18:50:58 -07:00
Kevin Sawicki 5f359a4271 💄 2014-05-28 18:36:42 -07:00
Kevin Sawicki ae1dd6e876 Add missing comma 2014-05-28 18:31:20 -07:00
Kevin Sawicki d1bd2113bf Install npm into build/ folder 2014-05-28 18:30:27 -07:00
probablycorey c9ae9e11c1 Reword specs 2014-05-28 16:34:42 -07:00
Ben Ogle b10b8d80ae Upgrade find-and-replace@0.110.0 2014-05-28 16:34:11 -07:00
probablycorey 7f57a094f6 Determine softTab state after the buffer is tokenized. 2014-05-28 16:31:00 -07:00
probablycorey b7df08cbdd Add spec to re-emit the tokenized event when the grammar is changed 2014-05-28 16:10:02 -07:00
probablycorey 89dc5f26ad Only emit the tokenized event after the first full tokenization 2014-05-28 15:56:08 -07:00
probablycorey 2c60b0463e Use tokenized buffer created by editor 2014-05-28 15:46:26 -07:00
Ben Ogle 3093198662 Upgrade to background-tips@0.14.0 2014-05-28 15:31:35 -07:00
Ben Ogle 7b8ef2f6e3 Upgrade atom-light-ui@0.25.0 2014-05-28 14:58:16 -07:00
probablycorey c56ac70181 Add tokenized event to tokenized buffer 2014-05-28 14:53:38 -07:00
Ben Ogle d77c914fd8 Upgrade to atom-dark-ui@0.28.0 2014-05-28 14:52:46 -07:00
Ben Ogle 8e91e503c9 Upgrade atom-dark-ui@0.27.0
Close atom/tabs#51
2014-05-28 14:33:55 -07:00
Kevin Sawicki 97c9f05447 Upgrade to fuzzy-finder@0.53.0 2014-05-28 14:15:08 -07:00
Ben Ogle 2715bec4c8 Upgrade find-and-replace@0.109.0 2014-05-28 14:08:58 -07:00
Kevin Sawicki 45717d7431 📝 Correct typos 2014-05-28 14:01:45 -07:00
Kevin Sawicki afd61a369b 📝 Pluralize method 2014-05-28 14:00:50 -07:00
Kevin Sawicki 86082d19e1 Upgrade to apm 0.59.0 2014-05-28 13:29:27 -07:00
Kevin Sawicki 1f21e4178d Upgrade to timecop@0.19.0 2014-05-28 13:04:38 -07:00
Kevin Sawicki bb31af5e8c Upgrade to language-perl@0.9.0 2014-05-28 09:46:28 -07:00
Kevin Sawicki befedac546 Upgrade to bracket-matcher@0.39.0 2014-05-28 09:16:37 -07:00
Ivan Žužak be0dcb840e Upgrade to find-and-replace@0.108.0 2014-05-28 17:31:37 +02:00
Ivan Žužak b521af9b4a Upgrade to settings-view@0.117.0 2014-05-28 16:31:53 +02:00
Chris Pearson 61cb22840e Update getLongTitle to fall back to basename
Update getLongTitle to fall back to basename when the relative path
resolves to a blank string.
2014-05-28 15:12:51 +01:00
Nathan Sobo eaeb5b3b13 Upgrade snippets to support multi-digit tabstop indices 2014-05-27 19:09:07 -06:00
Kevin Sawicki 466a50ff37 Merge pull request #2386 from atom/ks-reload-grammar-from-model
Reload grammar in editor when path changes
2014-05-27 13:53:26 -07:00
Kevin Sawicki 4f2d935a1d Reload grammar on path changed in TokenizedBuffer 2014-05-27 12:58:17 -07:00
Kevin Sawicki b19126024a 💄 2014-05-27 12:58:17 -07:00
Kevin Sawicki 56eb1fc6e4 Reload grammar before emitting events 2014-05-27 12:58:17 -07:00
Kevin Sawicki 07a2a6710d Reload grammar in editor when path changes 2014-05-27 12:58:17 -07:00
Nathan Sobo cbedd221f3 Merge pull request #2419 from atom/bo-fix-cursor
Make cursor visible when over indent guides
2014-05-27 14:45:33 -05:00
Ben Ogle d684911fce Make cursor visible when over indent guides 2014-05-27 12:11:24 -07:00
Kevin Sawicki b625965982 Upgrade to apm 0.58.0 2014-05-27 11:34:50 -07:00
Nathan Sobo 9688469501 Merge pull request #2387 from atom/ns-react-find-and-replace-markers
Make React editor backward compatible with find-and-replace marker views
2014-05-27 13:20:51 -05:00
Nathan Sobo f9cb9b7ea2 Upgrade find-and-replace to support the ReactEditorView 2014-05-27 12:11:29 -06:00
Nathan Sobo 6448258f4e Add shims to support find-and-replace marker views 2014-05-27 12:11:01 -06:00
Kevin Sawicki 9f1a3c6eff 📝 Recommend opening issue on atom/atom 2014-05-27 10:43:12 -07:00
Kevin Sawicki 21c2bf4861 📝 Don't use emojis in the title header 2014-05-27 10:43:12 -07:00
Corey Johnson b9753a0785 Force npm to be installed on cibuilds 2014-05-27 10:34:11 -07:00
Kevin Sawicki ff27ac5670 Upgrade to tree-view@0.95.0 2014-05-27 09:53:13 -07:00
Corey Johnson 720679b41b Upgrade to tree-view@0.94.0 2014-05-27 09:41:25 -07:00
Kevin Sawicki 248843583e Merge pull request #2399 from frk1705/patch-1
Fix example in editor-view.coffee
2014-05-27 08:51:28 -07:00
Kevin Sawicki 1f3ef99390 Merge pull request #2400 from Gaelan/patch-1
Add 🏁 for Windows to CONTRIBUTING.md
2014-05-27 08:50:42 -07:00
Kevin Sawicki e74b56c50e Update to language-xml@0.14.0 2014-05-27 08:49:18 -07:00
Kevin Sawicki c924d55a26 Upgrade to fuzzy-finder@0.52.0 2014-05-27 08:37:42 -07:00
Kevin Sawicki 4964a067d0 Upgrade to symbols-view@0.54.0 2014-05-27 08:32:30 -07:00
Cheng Zhao 264196a11f Upgrade to atom-shell@0.12.7 2014-05-27 17:24:10 +08:00
Gaelan bfa70b4ba6 Add 🏁 for Windows to CONTRIBUTING.md 2014-05-25 18:28:02 -07:00
Maximilian Schüßler 7e5d554bd8 Fix example in editor-view.coffee 2014-05-25 21:27:21 +02:00
Ben Ogle 00987f3642 Merge pull request #2380 from ddavison/master
ⓐⓓⓓⓘⓝⓖ ⓟⓐⓣⓒⓗ ⓣⓞ ⓓⓞⓒⓢ
2014-05-23 16:14:30 -07:00
ddavison 6e070ae057 ⓒⓛⓐⓡⓘⓕⓘⓒⓐⓣⓘⓞⓝ 2014-05-23 19:12:12 -04:00
Kevin Sawicki ac70bfc456 Don't parse line and column if path to open exists
This previously prevented file containing a colon from being open
from the command line.

Closes #2376
2014-05-23 15:32:55 -07:00
Kevin Sawicki fd0f323666 Open directory path instead of project path
This ensures that the repository opened is always project’s
path instead of the potentially non-existent path or file
specified to Project::setPath
2014-05-23 15:05:04 -07:00
Nathan Sobo 0e31557abf Only measure character widths when editor is visible 2014-05-23 15:59:44 -06:00
Kevin Sawicki e7c1d20d8e Upgrade to keybinding-resolver@0.18.0 2014-05-23 14:43:21 -07:00
Kevin Sawicki e8c8f0de0d Prepare 0.100.0 release 2014-05-23 14:29:36 -07:00
Kevin Sawicki ea0773e8fc Upgrade to atom-keymap 0.23.0 2014-05-23 14:00:33 -07:00
ddavison 037306a30c Merge branch 'master' of https://github.com/ddavison/atom
* 'master' of https://github.com/ddavison/atom:
  ⓐⓓⓓⓘⓝⓖ ⓟⓐⓣⓒⓗ ⓣⓞ ⓓⓞⓒⓢ

Conflicts:
	docs/publishing-a-package.md
2014-05-23 15:30:05 -04:00
ddavison 9ea94cb6cc ⓐⓓⓓⓘⓝⓖ ⓟⓐⓣⓒⓗ ⓣⓞ ⓓⓞⓒⓢ 2014-05-23 15:29:35 -04:00
ddavison 97fe09f157 ⓐⓓⓓⓘⓝⓖ ⓟⓐⓣⓒⓗ ⓣⓞ ⓓⓞⓒⓢ 2014-05-23 15:16:51 -04:00
Nathan Sobo 5b149bd41a Merge pull request #2370 from atom/ns-react-fix-scroll-corruption
Prevent React editor's scroll view from being auto-scrolled by Chromium
2014-05-23 12:54:15 -06:00
Corey Johnson 8a899f2116 Merge pull request #2360 from atom/apm-api-docs
add atom.io api docs
2014-05-23 10:18:06 -07:00
Kevin Sawicki dfa2f46ced Prepare 0.99.0 release 2014-05-23 09:36:25 -07:00
Nathan Sobo fae035731f Prevent autoscrolling scroll-view when cursor is at end of longest line
If the longest line is longer than the width of the scroll view, we need
to allow 2px horizontally to prevent the hidden input from
autoscrolling.
2014-05-22 20:18:34 -06:00
Nathan Sobo 446a48ca00 Position hidden input at 0,0 unless cursor is focused
The editor's scroll view is getting autoscrolled when the editor is
focused, so we won't position the hidden input until after the editor
is focused, and will always return it to 0,0 when the editor is blurred.
2014-05-22 20:13:50 -06:00
Nathan Sobo ce9b34c9eb Warn when scroll view gets accidentally scrolled and fix it
I want this code to go away once we track down the causes of any
unwanted autoscrolling by the browser
2014-05-22 19:53:14 -06:00
Daniel Hengeveld e6229f6145 Use h4 for individual methods in apm api doc 2014-05-22 15:45:30 -07:00
Chris Pearson a337384e7b Update getLongTitle to be project relative 2014-05-22 21:49:49 +01:00
Daniel Hengeveld 40b66e8eb3 add atom.io api docs 2014-05-22 12:13:58 -07:00
29 arquivos alterados com 442 adições e 93 exclusões
-1
Ver Arquivo
@@ -1,2 +1 @@
ca =
cache = ~/.atom/.npm
+7 -5
Ver Arquivo
@@ -1,12 +1,13 @@
# :tada: Contributing to Atom :tada:
# Contributing to Atom
:+1::tada: First off, thanks for taking the time to contribute! :tada::+1:
The following is a set of guidelines for contributing to Atom and its packages,
which are hosted in the [Atom Organization](https://github.com/atom) on GitHub.
If you're unsure which package is causing your problem or if you're having an
issue with Atom core, please use the feedback form in the application or email
[atom@github.com](mailto:atom@github.com). These are just guidelines, not rules,
use your best judgement and feel free to propose changes to this document in a
pull request.
issue with Atom core, please open an issue on the [main atom repository](https://github.com/atom/atom/issues).
These are just guidelines, not rules, use your best judgement and feel free to
propose changes to this document in a pull request.
## Submitting Issues
@@ -68,6 +69,7 @@ For more information on how to work with Atom's official packages, see
* :memo: `:memo:` when writing docs
* :penguin: `:penguin:` when fixing something on Linux
* :apple: `:apple:` when fixing something on Mac OS
* :checkered_flag: `:checkered_flag:` when fixing something on Windows
* :bug: `:bug:` when fixing a bug
* :fire: `:fire:` when removing code or files
* :green_heart: `:green_heart:` when fixing the CI build
+1 -1
Ver Arquivo
@@ -6,6 +6,6 @@
"url": "https://github.com/atom/atom.git"
},
"dependencies": {
"atom-package-manager": "0.57.0"
"atom-package-manager": "0.59.0"
}
}
+1 -1
Ver Arquivo
@@ -26,7 +26,7 @@
"harmony-collections": "~0.3.8",
"json-front-matter": "~0.1.3",
"legal-eagle": "~0.4.0",
"minidump": "0.5.x",
"minidump": "~0.6",
"read-package-json": "1.1.8",
"normalize-package-data": "0.2.12",
"rcedit": "~0.1.2",
+189
Ver Arquivo
@@ -0,0 +1,189 @@
## Atom.io package and update API
This guide describes the web API used by [apm](https://github.com/atom/apm) and
Atom. The vast majority of use cases are met by the `apm` command-line tool,
which does other useful things like incrementing your version in `package.json`
and making sure you have pushed your git tag. In fact, Atom itself shells out to
`apm` rather than hitting the API directly. If you're curious about how Atom
uses `apm`, see the [PackageManager class](https://github.com/atom/settings-view/blob/master/lib/package-manager.coffee)
in the `settings-view` package.
### Authorization
For calls to the API that require authentication, provide a valid token from your
[Atom.io account page](https://atom.io/account) in the `Authorization` header.
### Media type
All requests that take parameters require `application/json`.
## Resources
### Packages
#### GET /api/packages
Returns a list of all packages in the following format:
```json
[
{
"releases": {
"latest": "0.6.0"
},
"name": "thedaniel-test-package",
"repository": {
"type": "git",
"url": "https://github.com/thedaniel/test-package"
}
},
...
]
```
#### GET /api/packages/:package_name
Returns package details and versions for a single package
Parameters:
- **engine** (optional) - Only show packages with versions compatible with this
Atom version. Must be valid [SemVer](http://semver.org).
Returns:
```json
{
"releases": {
"latest": "0.6.0"
},
"name": "thedaniel-test-package",
"repository": {
"type": "git",
"url": "https://github.com/thedaniel/test-package"
},
"versions": [
(see single version output below)
...,
]
}
```
#### POST /api/packages
Create a new package; requires authentication.
The name and version will be fetched from the `package.json`
file in the specified repository. The authenticating user *must* have access
to the indicated repository.
When a package is created, a release hook is registered with GitHub for package
version creation.
Parameters:
- **repository** - String. The repository containing the plugin, in the form "owner/repo"
Returns:
- **201** - Successfully created, returns created package.
- **400** - Repository is inaccessible, nonexistent, not an atom package. Possible
error messages include:
- That repo does not exist, isn't an atom package, or atombot does not have access
- The package.json at owner/repo isn't valid
- **409** - A package by that name already exists
#### DELETE /api/packages/:package_name
Delete a package; requires authentication.
Returns:
- **204** - Success
- **400** - Repository is inaccessible
- **401** - Unauthorized
### Package Versions
#### GET /api/packages/:package_name/versions/:version_name
Returns `package.json` with `dist` key added for e.g. tarball download:
```json
{
"bugs": {
"url": "https://github.com/thedaniel/test-package/issues"
},
"dependencies": {
"async": "~0.2.6",
"pegjs": "~0.7.0",
"season": "~0.13.0"
},
"description": "Expand snippets matching the current prefix with `tab`.",
"dist": {
"tarball": "https://codeload.github.com/..."
},
"engines": {
"atom": "*"
},
"main": "./lib/snippets",
"name": "thedaniel-test-package",
"publishConfig": {
"registry": "https://...",
},
"repository": {
"type": "git",
"url": "https://github.com/thedaniel/test-package.git"
},
"version": "0.6.0"
}
```
### Creating a new package version
#### POST /api/packages/:package_name/versions
Creates a new package version from a git tag; requires authentication.
#### Parameters
- **tag** - A git tag for the version you'd like to create. It's important to note
that the version name will not be taken from the tag, but from the `version`
key in the `package.json` file at that ref. The authenticating user *must* have
access to the package repository.
#### Returns
- **201** - Successfully created. Returns created version.
- **400** - Git tag not found / Repository inaccessible
- **409** - Version exists
### Delete a version
#### DELETE /api/packages/:package_name/versions/:version_name
Deletes a package version; requires authentication.
Note that a version cannot be republished with a different tag if it is deleted.
If you need to delete the latest version of a package for e.g. security reasons,
you'll need to increment the version when republishing.
Returns 204 No Content
### Atom updates
#### GET /api/updates
Atom update feed, following the format expected by [Squirrel](https://github.com/Squirrel/).
Returns:
```
{
"name": "0.96.0",
"notes": "[HTML release notes]"
"pub_date": "2014-05-19T15:52:06.000Z",
"url": "https://www.atom.io/api/updates/download"
}
```
+20 -3
Ver Arquivo
@@ -75,18 +75,34 @@ credentials are stored securely in your [keychain][keychain] once you login.
:tada: Your package is now published and available on atom.io. Head on over to
`http://atom.io/packages/my-package` to see your package's page.
With `apm publish`, you can bump the version and publish by using
```sh
apm publish <version-type>
```
where `<version-type>` can be `major`, `minor` and `patch`.
The `major` option to the publish command tells apm to increment the first
digit of the version before publishing so the published version will be `1.0.0`
and the Git tag created will be `v1.0.0`.
The `minor` option to the publish command tells apm to increment the second
digit of the version before publishing so the published version will be `0.1.0`
and the Git tag created will be `v0.1.0`.
In the future you can run `apm publish major` to publish the `1.0.0` version but
since this was the first version being published it is a good idea to start
with a minor release.
The `patch` option to the publish command tells apm to increment the third
digit of the version before publishing so the published version will be `0.0.1`
and the Git tag created will be `v0.0.1`.
Use `major` when you make a huge change, like a rewrite, or a large change to the functionality or interface.
Use `minor` when adding or removing a feature.
Use `patch` when you make a small change like a bug fix that does not add or remove features.
### Further Reading
* Check out [semantic versioning][semver] to learn more about versioning your
package releases.
* Consult the [Atom.io package API docs][apm-rest-api] to learn more about how
`apm` works.
[atomio]: https://atom.io
[github]: https://github.com
@@ -95,3 +111,4 @@ with a minor release.
[repo-guide]: http://guides.github.com/overviews/desktop
[semver]: http://semver.org
[your-first-package]: your-first-package.html
[apm-rest-api]: apm-rest-api.md
+5 -5
Ver Arquivo
@@ -1,4 +1,4 @@
# Writting specs
# Writing specs
Atom uses [Jasmine](http://jasmine.github.io/2.0/introduction.html) as its spec framework. Any new functionality should have specs to guard against regressions.
@@ -10,7 +10,7 @@ Atom uses [Jasmine](http://jasmine.github.io/2.0/introduction.html) as its spec
Spec files **must** end with `-spec` so add `sample-spec.coffee` to `atom/spec`.
0. Add one or more `describe` method
0. Add one or more `describe` methods
The `describe` method takes two arguments, a description and a function. If the description explains a behavior it typically begins with `when` if it is more like a unit test it begins with the method name.
@@ -28,7 +28,7 @@ Atom uses [Jasmine](http://jasmine.github.io/2.0/introduction.html) as its spec
0. Add one or more `it` method
The `it` method also takes two arugments, a description and a function. Try and make the description flow with the `it` method. For example, a description of `this should work` doesn't read well as `it this should work`. But a description of `should work` sounds great as `it should work`.
The `it` method also takes two arguments, a description and a function. Try and make the description flow with the `it` method. For example, a description of `this should work` doesn't read well as `it this should work`. But a description of `should work` sounds great as `it should work`.
```coffee
describe "when a test is written", ->
@@ -38,7 +38,7 @@ Atom uses [Jasmine](http://jasmine.github.io/2.0/introduction.html) as its spec
0. Add one or more expectations
The best way to learn about expectations is to read the [jamsine documentation](http://jasmine.github.io/2.0/introduction.html#section-Expectations) about them. Below is a simple example.
The best way to learn about expectations is to read the [jasmine documentation](http://jasmine.github.io/2.0/introduction.html#section-Expectations) about them. Below is a simple example.
```coffee
describe "when a test is written", ->
@@ -47,7 +47,7 @@ Atom uses [Jasmine](http://jasmine.github.io/2.0/introduction.html) as its spec
expect("oranges").not.toEqual("apples")
```
## Runnings specs
## Running specs
Most of the time you'll want to run specs by triggering the `window:run-package-specs` command. This command is not only to run package specs, it is also for Atom core specs. This will run all the specs in the current project's spec directory. If you want to run the Atom core specs and **all** the default package specs trigger the `window:run-all-specs` command.
+2
Ver Arquivo
@@ -12,6 +12,7 @@
# Sublime Parity
'tab': 'editor:indent'
'enter': 'editor:newline'
'num-enter': 'editor:newline'
'shift-tab': 'editor:outdent-selected-rows'
'ctrl-K': 'editor:delete-line'
@@ -26,6 +27,7 @@
'tab': 'core:focus-next'
'shift-tab': 'core:focus-previous'
'enter': 'native!'
'num-enter': 'native!'
'backspace': 'native!'
'shift-backspace': 'native!'
'delete': 'native!'
+1
Ver Arquivo
@@ -21,6 +21,7 @@
'cmd-O': 'application:open-dev'
'cmd-alt-ctrl-s': 'application:run-all-specs'
'enter': 'core:confirm'
'num-enter': 'core:confirm'
'escape': 'core:cancel'
'up': 'core:move-up'
'down': 'core:move-down'
+1
Ver Arquivo
@@ -1,6 +1,7 @@
'body':
# Atom Specific
'enter': 'core:confirm'
'num-enter': 'core:confirm'
'escape': 'core:cancel'
'up': 'core:move-up'
'down': 'core:move-down'
+1
Ver Arquivo
@@ -5,6 +5,7 @@
# Atom Specific
'enter': 'core:confirm'
'num-enter': 'core:confirm'
'escape': 'core:cancel'
'up': 'core:move-up'
'down': 'core:move-down'
+21 -21
Ver Arquivo
@@ -1,7 +1,7 @@
{
"name": "atom",
"productName": "Atom",
"version": "0.98.0",
"version": "0.100.0",
"description": "A hackable text editor for the 21st Century.",
"main": "./src/browser/main.js",
"repository": {
@@ -17,17 +17,17 @@
"url": "http://github.com/atom/atom/raw/master/LICENSE.md"
}
],
"atomShellVersion": "0.12.5",
"atomShellVersion": "0.12.7",
"dependencies": {
"async": "0.2.6",
"atom-keymap": "^0.19.0",
"atom-keymap": "^0.26.0",
"bootstrap": "git+https://github.com/atom/bootstrap.git#6af81906189f1747fd6c93479e3d998ebe041372",
"clear-cut": "0.4.0",
"coffee-script": "1.7.0",
"coffeestack": "0.7.0",
"delegato": "^1",
"emissary": "^1.2.1",
"first-mate": "^1.5.3",
"first-mate": "^1.6",
"fs-plus": "^2.2.3",
"fstream": "0.1.24",
"fuzzaldrin": "^1.1",
@@ -63,9 +63,9 @@
},
"packageDependencies": {
"atom-dark-syntax": "0.15.0",
"atom-dark-ui": "0.26.0",
"atom-dark-ui": "0.28.0",
"atom-light-syntax": "0.17.0",
"atom-light-ui": "0.24.0",
"atom-light-ui": "0.25.0",
"base16-tomorrow-dark-theme": "0.15.0",
"solarized-dark-syntax": "0.14.0",
"solarized-light-syntax": "0.7.0",
@@ -73,36 +73,36 @@
"autocomplete": "0.28.0",
"autoflow": "0.17.0",
"autosave": "0.13.0",
"background-tips": "0.13.0",
"background-tips": "0.14.0",
"bookmarks": "0.22.0",
"bracket-matcher": "0.38.0",
"bracket-matcher": "0.41.0",
"command-palette": "0.21.0",
"deprecation-cop": "0.5.0",
"deprecation-cop": "0.6.0",
"dev-live-reload": "0.30.0",
"exception-reporting": "0.17.0",
"feedback": "0.33.0",
"find-and-replace": "0.106.0",
"fuzzy-finder": "0.51.0",
"find-and-replace": "0.110.0",
"fuzzy-finder": "0.53.0",
"git-diff": "0.28.0",
"go-to-line": "0.21.0",
"grammar-selector": "0.27.0",
"image-view": "0.33.0",
"keybinding-resolver": "0.17.0",
"keybinding-resolver": "0.18.0",
"link": "0.22.0",
"markdown-preview": "0.72.0",
"metrics": "0.32.0",
"open-on-github": "0.28.0",
"package-generator": "0.30.0",
"release-notes": "0.31.0",
"settings-view": "0.116.0",
"snippets": "0.43.0",
"settings-view": "0.117.0",
"snippets": "0.44.0",
"spell-check": "0.35.0",
"status-bar": "0.40.0",
"styleguide": "0.29.0",
"symbols-view": "0.53.0",
"tabs": "0.40.0",
"timecop": "0.18.0",
"tree-view": "0.93.0",
"symbols-view": "0.54.0",
"tabs": "0.41.0",
"timecop": "0.19.0",
"tree-view": "0.95.0",
"update-package-dependencies": "0.6.0",
"welcome": "0.14.0",
"whitespace": "0.22.0",
@@ -121,11 +121,11 @@
"language-less": "0.9.0",
"language-make": "0.10.0",
"language-objective-c": "0.11.0",
"language-perl": "0.8.0",
"language-perl": "0.9.0",
"language-php": "0.14.0",
"language-property-list": "0.7.0",
"language-python": "0.17.0",
"language-ruby": "0.25.0",
"language-ruby": "0.26.0",
"language-ruby-on-rails": "0.14.0",
"language-sass": "0.11.0",
"language-shellscript": "0.8.0",
@@ -134,7 +134,7 @@
"language-text": "0.6.0",
"language-todo": "0.10.0",
"language-toml": "0.12.0",
"language-xml": "0.13.0",
"language-xml": "0.14.0",
"language-yaml": "0.6.0"
},
"private": true,
+2 -1
Ver Arquivo
@@ -45,13 +45,14 @@ var apmPath = path.resolve(__dirname, '..', 'apm', 'node_modules', 'atom-package
var apmFlags = process.env.JANKY_SHA1 || process.argv.indexOf('--no-color') !== -1 ? '--no-color' : '';
var npmPath = path.resolve(__dirname, '..', 'build', 'node_modules', '.bin', 'npm');
var initialNpmCommand = fs.existsSync(npmPath) ? npmPath : 'npm';
var npmFlags = ' --userconfig=' + path.resolve('.npmrc') + ' ';
var packagesToDedupe = ['fs-plus', 'humanize-plus', 'oniguruma', 'roaster', 'season'];
var echoNewLine = process.platform == 'win32' ? 'echo.' : 'echo';
var commands = [
{command: 'npm' + npmFlags + 'install --quiet', options: {cwd: path.resolve(__dirname, '..', 'build'), ignoreStdout: true}},
{command: initialNpmCommand + npmFlags + 'install --quiet', options: {cwd: path.resolve(__dirname, '..', 'build'), ignoreStdout: true}},
{command: npmPath + npmFlags + 'install --quiet', options: {cwd: apmInstallPath, ignoreStdout: true}},
echoNewLine,
apmPath + ' clean ' + apmFlags,
+15 -13
Ver Arquivo
@@ -28,17 +28,19 @@ function readEnvironmentVariables() {
}
readEnvironmentVariables();
cp.safeExec.bind(global, 'node script/bootstrap', function(error) {
if (error)
process.exit(1);
require('fs-plus').removeSync.bind(global, path.join(homeDir, '.atom'))
var async = require('async');
var gruntPath = path.join('build', 'node_modules', '.bin', 'grunt') + (process.platform === 'win32' ? '.cmd' : '');
var tasks = [
cp.safeExec.bind(global, 'git clean -dff'),
cp.safeExec.bind(global, gruntPath + ' ci --gruntfile build/Gruntfile.coffee --stack --no-color'),
]
async.series(tasks, function(error) {
process.exit(error ? 1 : 0);
});
cp.safeExec.bind(global, 'npm install npm', {cwd: path.resolve(__dirname, '..', 'build')}, function() {
cp.safeExec.bind(global, 'node script/bootstrap', function(error) {
if (error)
process.exit(1);
require('fs-plus').removeSync.bind(global, path.join(homeDir, '.atom'))
var async = require('async');
var gruntPath = path.join('build', 'node_modules', '.bin', 'grunt') + (process.platform === 'win32' ? '.cmd' : '');
var tasks = [
cp.safeExec.bind(global, 'git clean -dff'),
cp.safeExec.bind(global, gruntPath + ' ci --gruntfile build/Gruntfile.coffee --stack --no-color'),
]
async.series(tasks, function(error) {
process.exit(error ? 1 : 0);
});
})();
})();
+51 -19
Ver Arquivo
@@ -375,25 +375,6 @@ describe "EditorComponent", ->
advanceClock(component.props.cursorBlinkPeriod / 2)
expect(cursorsNode.classList.contains('blink-off')).toBe true
it "renders the hidden input field at the position of the last cursor if it is on screen", ->
inputNode = node.querySelector('.hidden-input')
node.style.height = 5 * lineHeightInPixels + 'px'
node.style.width = 10 * charWidth + 'px'
component.measureHeightAndWidth()
expect(editor.getCursorScreenPosition()).toEqual [0, 0]
editor.setScrollTop(3 * lineHeightInPixels)
editor.setScrollLeft(3 * charWidth)
expect(inputNode.offsetTop).toBe 0
expect(inputNode.offsetLeft).toBe 0
editor.setCursorBufferPosition([5, 5])
cursorRect = editor.getCursor().getPixelRect()
cursorTop = cursorRect.top
cursorLeft = cursorRect.left
expect(inputNode.offsetTop).toBe cursorTop - editor.getScrollTop()
expect(inputNode.offsetLeft).toBe cursorLeft - editor.getScrollLeft()
it "does not render cursors that are associated with non-empty selections", ->
editor.setSelectedScreenRange([[0, 4], [4, 6]])
editor.addCursorAtScreenPosition([6, 8])
@@ -468,6 +449,48 @@ describe "EditorComponent", ->
expect(node.querySelectorAll('.selection').length).toBe 1
describe "hidden input field", ->
it "renders the hidden input field at the position of the last cursor if the cursor is on screen and the editor is focused", ->
editor.setVerticalScrollMargin(0)
editor.setHorizontalScrollMargin(0)
inputNode = node.querySelector('.hidden-input')
node.style.height = 5 * lineHeightInPixels + 'px'
node.style.width = 10 * charWidth + 'px'
component.measureHeightAndWidth()
expect(editor.getCursorScreenPosition()).toEqual [0, 0]
editor.setScrollTop(3 * lineHeightInPixels)
editor.setScrollLeft(3 * charWidth)
expect(inputNode.offsetTop).toBe 0
expect(inputNode.offsetLeft).toBe 0
# In bounds, not focused
editor.setCursorBufferPosition([5, 4])
expect(inputNode.offsetTop).toBe 0
expect(inputNode.offsetLeft).toBe 0
# In bounds and focused
inputNode.focus()
expect(inputNode.offsetTop).toBe (5 * lineHeightInPixels) - editor.getScrollTop()
expect(inputNode.offsetLeft).toBe (4 * charWidth) - editor.getScrollLeft()
# In bounds, not focused
inputNode.blur()
expect(inputNode.offsetTop).toBe 0
expect(inputNode.offsetLeft).toBe 0
# Out of bounds, not focused
editor.setCursorBufferPosition([1, 2])
expect(inputNode.offsetTop).toBe 0
expect(inputNode.offsetLeft).toBe 0
# Out of bounds, focused
inputNode.focus()
expect(inputNode.offsetTop).toBe 0
expect(inputNode.offsetLeft).toBe 0
describe "mouse interactions", ->
linesNode = null
@@ -822,3 +845,12 @@ describe "EditorComponent", ->
wrapperView.show()
expect(editor.getLineHeightInPixels()).not.toBe initialLineHeightInPixels
expect(editor.getDefaultCharWidth()).not.toBe initialCharWidth
describe "when lines are changed while the editor is hidden", ->
it "does not measure new characters until the editor is shown again", ->
editor.setText('')
wrapperView.hide()
editor.setText('var z = 1')
editor.setCursorBufferPosition([0, Infinity])
wrapperView.show()
expect(node.querySelector('.cursor').style['-webkit-transform']).toBe "translate3d(#{9 * charWidth}px, 0px, 0px)"
+12
Ver Arquivo
@@ -2876,6 +2876,18 @@ describe "Editor", ->
expect(editor.lineForBufferRow(4)).toBe " }"
expect(editor.lineForBufferRow(5)).toBe " i=1"
describe "soft and hard tabs", ->
it "resets the tab style when tokenization is complete", ->
editor.destroy()
atom.project.open('sample-with-tabs-and-leading-comment.coffee').then (o) -> editor = o
expect(editor.softTabs).toBe true
waitsForPromise ->
atom.packages.activatePackage('language-coffee-script')
runs ->
expect(editor.softTabs).toBe false
describe ".destroy()", ->
it "destroys all markers associated with the edit session", ->
expect(buffer.getMarkerCount()).toBeGreaterThan 0
@@ -0,0 +1,4 @@
# This is a comment
if this.studyingEconomics
buy() while supply > demand
sell() until supply > demand
+51
Ver Arquivo
@@ -385,7 +385,58 @@ describe "TokenizedBuffer", ->
expect(tokens[1].value).toBeTruthy()
expect(tokens[2].value).toBe 'xyz'
describe "when the grammar is tokenized", ->
it "emits the `tokenized` event", ->
editor = null
tokenizedHandler = jasmine.createSpy("tokenized handler")
waitsForPromise ->
atom.project.open('sample.js').then (o) -> editor = o
runs ->
tokenizedBuffer = editor.displayBuffer.tokenizedBuffer
tokenizedBuffer.on 'tokenized', tokenizedHandler
fullyTokenize(tokenizedBuffer)
expect(tokenizedHandler.callCount).toBe(1)
it "doesn't re-emit the `tokenized` event when it is re-tokenized", ->
editor = null
tokenizedHandler = jasmine.createSpy("tokenized handler")
waitsForPromise ->
atom.project.open('sample.js').then (o) -> editor = o
runs ->
tokenizedBuffer = editor.displayBuffer.tokenizedBuffer
fullyTokenize(tokenizedBuffer)
tokenizedBuffer.on 'tokenized', tokenizedHandler
editor.getBuffer().insert([0, 0], "'")
fullyTokenize(tokenizedBuffer)
expect(tokenizedHandler).not.toHaveBeenCalled()
describe "when the grammar is updated because a grammar it includes is activated", ->
it "re-emits the `tokenized` event", ->
editor = null
tokenizedBuffer = null
tokenizedHandler = jasmine.createSpy("tokenized handler")
waitsForPromise ->
atom.project.open('coffee.coffee').then (o) -> editor = o
runs ->
tokenizedBuffer = editor.displayBuffer.tokenizedBuffer
tokenizedBuffer.on 'tokenized', tokenizedHandler
fullyTokenize(tokenizedBuffer)
tokenizedHandler.reset()
waitsForPromise ->
atom.packages.activatePackage('language-coffee-script')
runs ->
fullyTokenize(tokenizedBuffer)
expect(tokenizedHandler.callCount).toBe(1)
it "retokenizes the buffer", ->
waitsForPromise ->
+15 -7
Ver Arquivo
@@ -306,13 +306,7 @@ class AtomApplication
# :safeMode - Boolean to control the opened window's safe mode.
# :windowDimensions - Object with height and width keys.
openPath: ({pathToOpen, pidToKillWhenClosed, newWindow, devMode, safeMode, windowDimensions}={}) ->
if pathToOpen
[basename, initialLine, initialColumn] = path.basename(pathToOpen).split(':')
pathToOpen = path.join(path.dirname(pathToOpen), basename) if initialLine
# Convert line numbers to a base of 0
initialLine -= 1 if initialLine
initialColumn -= 1 if initialColumn
{pathToOpen, initialLine, initialColumn} = @locationForPathToOpen(pathToOpen)
unless devMode
existingWindow = @windowForPath(pathToOpen) unless pidToKillWhenClosed or newWindow
@@ -415,6 +409,20 @@ class AtomApplication
isSpec = true
new AtomWindow({bootstrapScript, @resourcePath, isSpec})
locationForPathToOpen: (pathToOpen) ->
return {pathToOpen} unless pathToOpen
return {pathToOpen} if fs.existsSync(pathToOpen)
[fileToOpen, initialLine, initialColumn] = path.basename(pathToOpen).split(':')
return {pathToOpen} unless initialLine
return {pathToOpen} unless parseInt(initialLine) > 0
# Convert line numbers to a base of 0
initialLine -= 1 if initialLine
initialColumn -= 1 if initialColumn
pathToOpen = path.join(path.dirname(pathToOpen), fileToOpen)
{pathToOpen, initialLine, initialColumn}
# Opens a native dialog to prompt the user for a path.
#
# Once paths are selected, they're opened in a new or existing {AtomWindow}s.
+1
Ver Arquivo
@@ -46,6 +46,7 @@ class DisplayBuffer extends Model
@updateAllScreenLines()
@createFoldForMarker(marker) for marker in @buffer.findMarkers(@getFoldMarkerAttributes())
@subscribe @tokenizedBuffer, 'grammar-changed', (grammar) => @emit 'grammar-changed', grammar
@subscribe @tokenizedBuffer, 'tokenized', => @emit 'tokenized'
@subscribe @tokenizedBuffer, 'changed', @handleTokenizedBufferChange
@subscribe @buffer, 'markers-updated', @handleBufferMarkersUpdated
@subscribe @buffer, 'marker-created', @handleBufferMarkerCreated
+1 -1
Ver Arquivo
@@ -65,7 +65,7 @@ EditorComponent = React.createClass
scrollTop, scrollLeft, scrollHeight, scrollWidth, @scrollingVertically,
@cursorsMoved, @selectionChanged, @selectionAdded, cursorBlinkPeriod,
cursorBlinkResumeDelay, @onInputFocused, @onInputBlurred, @mouseWheelScreenRow,
invisibles, visible, scrollViewHeight
invisibles, visible, scrollViewHeight, focused
}
ScrollbarComponent
+13 -6
Ver Arquivo
@@ -42,9 +42,16 @@ EditorScrollViewComponent = React.createClass
}
componentDidMount: ->
@getDOMNode().addEventListener 'overflowchanged', @onOverflowChanged
node = @getDOMNode()
node.addEventListener 'overflowchanged', @onOverflowChanged
window.addEventListener('resize', @onWindowResize)
node.addEventListener 'scroll', ->
console.warn "EditorScrollView scroll position changed, and it shouldn't have. If you can reproduce this, please report it."
node.scrollTop = 0
node.scrollLeft = 0
@measureHeightAndWidth()
componentDidUnmount: ->
@@ -158,15 +165,15 @@ EditorScrollViewComponent = React.createClass
{top, left}
getHiddenInputPosition: ->
{editor} = @props
return {top: 0, left: 0} unless @isMounted() and editor.getCursor()?
{editor, focused} = @props
return {top: 0, left: 0} unless @isMounted() and focused and editor.getCursor()?
{top, left, height, width} = editor.getCursor().getPixelRect()
top = top - editor.getScrollTop()
width = 2 if width is 0 # Prevent autoscroll at the end of longest line
top -= editor.getScrollTop()
left -= editor.getScrollLeft()
top = Math.max(0, Math.min(editor.getHeight() - height, top))
left = left - editor.getScrollLeft()
left = Math.max(0, Math.min(editor.getWidth() - width, left))
{top, left}
# Measure explicitly-styled height and width and relay them to the model. If
+1 -2
Ver Arquivo
@@ -28,7 +28,7 @@ LongLineLength = 1000
# ## Iterating over the open editor views
#
# ```coffee
# for editorView in atom.workspace.getEditorViews()
# for editorView in atom.workspaceView.getEditorViews()
# console.log(editorView.getEditor().getPath())
# ```
#
@@ -547,7 +547,6 @@ class EditorView extends View
@showBufferConflictAlert(@editor)
@subscribe @editor, "path-changed", =>
@editor.reloadGrammar()
@trigger 'editor:path-changed'
@subscribe @editor, "grammar-changed", =>
+6 -1
Ver Arquivo
@@ -211,6 +211,7 @@ class Editor extends Model
@subscribe @displayBuffer, "changed", (e) => @emit 'screen-lines-changed', e
@subscribe @displayBuffer, "markers-updated", => @mergeIntersectingSelections()
@subscribe @displayBuffer, 'grammar-changed', => @handleGrammarChange()
@subscribe @displayBuffer, 'tokenized', => @handleTokenization()
@subscribe @displayBuffer, 'soft-wrap-changed', (args...) => @emit 'soft-wrap-changed', args...
getViewClass: ->
@@ -259,7 +260,8 @@ class Editor extends Model
getLongTitle: ->
if sessionPath = @getPath()
fileName = path.basename(sessionPath)
directory = path.basename(path.dirname(sessionPath))
directory = atom.project.relativize(path.dirname(sessionPath))
directory = if directory.length > 0 then directory else path.basename(path.dirname(sessionPath))
"#{fileName} - #{directory}"
else
'untitled'
@@ -1850,6 +1852,9 @@ class Editor extends Model
logScreenLines: (start, end) -> @displayBuffer.logLines(start, end)
handleTokenization: ->
@softTabs = @usesSoftTabs() ? @softTabs
handleGrammarChange: ->
@unfoldAll()
@emit 'grammar-changed'
+3 -1
Ver Arquivo
@@ -50,12 +50,14 @@ LinesComponent = React.createClass
false
componentDidUpdate: (prevProps) ->
{visible, scrollingVertically} = @props
@measureLineHeightInPixelsAndCharWidthIfNeeded(prevProps)
@clearScreenRowCaches() unless prevProps.lineHeightInPixels is @props.lineHeightInPixels
@removeLineNodes() unless isEqualForProperties(prevProps, @props, 'showIndentGuide', 'invisibles')
@updateLines()
@clearScopedCharWidths() unless isEqualForProperties(prevProps, @props, 'fontSize', 'fontFamily')
@measureCharactersInNewLines() unless @props.scrollingVertically
@measureCharactersInNewLines() if visible and not scrollingVertically
clearScreenRowCaches: ->
@screenRowsByLineId = {}
+1 -1
Ver Arquivo
@@ -74,7 +74,7 @@ class Project extends Model
if projectPath?
directory = if fs.isDirectorySync(projectPath) then projectPath else path.dirname(projectPath)
@rootDirectory = new Directory(directory)
if @repo = Git.open(projectPath, project: this)
if @repo = Git.open(directory, project: this)
@repo.refreshIndex()
@repo.refreshStatus()
else
+7 -1
Ver Arquivo
@@ -5,7 +5,9 @@ EditorComponent = require './editor-component'
module.exports =
class ReactEditorView extends View
@content: -> @div class: 'editor react-wrapper'
# The `overlayer` class is included for backwards compatibility with
# context menus. It should be removed in v1.0.0
@content: -> @div class: 'editor react-wrapper overlayer'
focusOnAttach: false
@@ -16,6 +18,8 @@ class ReactEditorView extends View
Object.defineProperty @::, 'lineHeight', get: -> @editor.getLineHeightInPixels()
Object.defineProperty @::, 'charWidth', get: -> @editor.getDefaultCharWidth()
Object.defineProperty @::, 'firstRenderedScreenRow', get: -> @component.getRenderedRowRange()[0]
Object.defineProperty @::, 'lastRenderedScreenRow', get: -> @component.getRenderedRowRange()[1]
scrollTop: (scrollTop) ->
if scrollTop?
@@ -90,3 +94,5 @@ class ReactEditorView extends View
show: ->
super
@component.show()
requestDisplayUpdate: -> # No-op shim for find-and-replace
+9 -2
Ver Arquivo
@@ -31,7 +31,9 @@ class TokenizedBuffer extends Model
@on 'grammar-changed grammar-updated', => @resetTokenizedLines()
@subscribe @buffer, "changed", (e) => @handleBufferChange(e)
@subscribe @buffer, "path-changed", => @bufferPath = @buffer.getPath()
@subscribe @buffer, "path-changed", =>
@bufferPath = @buffer.getPath()
@reloadGrammar()
@subscribe @$tabLength.changes, (tabLength) =>
lastRow = @buffer.getLastRow()
@@ -76,6 +78,7 @@ class TokenizedBuffer extends Model
@tokenizedLines = @buildPlaceholderTokenizedLinesForRows(0, @buffer.getLastRow())
@invalidRows = []
@invalidateRow(0)
@fullyTokenized = false
setVisible: (@visible) ->
@tokenizeInBackground() if @visible
@@ -122,7 +125,11 @@ class TokenizedBuffer extends Model
@invalidateRow(row + 1) unless filledRegion
@emit "changed", { start: invalidRow, end: row, delta: 0 }
@tokenizeInBackground() if @firstInvalidRow()?
if @firstInvalidRow()?
@tokenizeInBackground()
else
@emit "tokenized" unless @fullyTokenized
@fullyTokenized = true
firstInvalidRow: ->
@invalidRows[0]
+1 -1
Ver Arquivo
@@ -17,7 +17,7 @@
}
.cursor {
z-index: 1;
z-index: 2;
}
&.is-focused .cursors.blink-off .cursor {