An open API service indexing awesome lists of open source software.

https://github.com/savetheclocktower/eslint.tmbundle

A TextMate bundle for ESLint, the linter and style checker for JavaScript
https://github.com/savetheclocktower/eslint.tmbundle

eslint linter textmate textmate-bundle tmbundle

Last synced: about 1 month ago
JSON representation

A TextMate bundle for ESLint, the linter and style checker for JavaScript

Awesome Lists containing this project

README

          

# TextMate bundle for ESLint

A bundle for [ESLint][], the linter and style checker for JavaScript.

Built for [TextMate 2][textmate].

## Installation

```bash
mkdir -p ~/Library/Application\ Support/TextMate/Pristine\ Copy/Bundles
cd ~/Library/Application\ Support/TextMate/Pristine\ Copy/Bundles
git clone git://github.com/savetheclocktower/ESLint.tmbundle.git
```

## Features

### Quick linting & gutter marking

Every time you save a file, the bundle will lint your code in the background. If it passes linting, you'll see nothing. If it fails linting with errors and/or warnings, you'll see a tooltip with the number of errors and warnings, and your gutter will get marked accordingly.

quick lint screenshot

### Full linting

If you want details about the warnings and errors for the file you're working in, run the **Validate File** command (Ctrl-Shift-V by default). You'll get an HTML window showing descriptions of the errors and warnings, along with hyperlinks that go to the specific line and column of the error.

full lint screenshot

### Project-wide linting

You can lint your entire project with the **Validate Project** command (Cmd-Opt-Shift-V). The output will be similar to that of Validate File, but will show warnings and errors from other files as well.

### Fixing

Some style violations — indentation, semicolons, and such — can automatically be fixed by ESLint. To fix the file you're in, run the **Fix File** command (Ctrl-Shift-H by default). If there are errors or warnings that can be automatically fixed, the command will replace the contents of your file with the fixed version.

Unlike `eslint --fix`, it **will not commit the changes to disk**; you should save the file to commit your changes. This makes Fix File behave like other TextMate reformatting and beautifying commands.

If it can't fix your code — either because there's nothing wrong with it, or because the remaining problems must be fixed manually — it'll say so in a tooltip.

## Setup

If you're using `eslint` in a specific project, you'll likely want to use that project's version of `eslint`. So define the `TM_ESLINT` variable in your project's `.tm_properties` file and assign it the path to your `eslint` binary:

```
TM_ESLINT = '$CWD/node_modules/.bin/eslint'
```

If you want linting in all JavaScript files, regardless of location, you can define `TM_ESLINT` (either in **Preferences → Variables** or in your `~/.tm_properties` file) to point to a global `eslint` installation, or else the bundle will use whichever `eslint` binary it finds in your path.

If a command can't find any `eslint` binary, it'll either complain via tooltip (the “Fix File” and “Validate File” commands) or silently do nothing (the “Quick Lint” command).

ESLint itself is very good at finding the proper `.eslintrc` file to use, so you don't have to give it special configuration in the bundle. Read about [`.eslintrc` files](https://eslint.org/docs/user-guide/configuring) on the ESLint web site.

### Specifying your working directory

When you put a `.tm_properties` file in a directory and give it a `projectDirectory` value, you've created a TextMate project. That directory will be considered the “working directory” of this bundle, and all `eslint` commands will be run from that directory.

The working directory is where `eslint` will expect to find an `.eslintignore` file. The **Lint Project** command will also implicitly lint all JavaScript files below the working directory (save for those that match `.eslintignore`).

If, for some strange reason, you need your working directory to be different than your project directory, you can define a `TM_ESLINT_WORKING_DIRECTORY` variable.

To determine the working directory, the bundle considers these candidates, in order:

1. The `TM_ESLINT_WORKING_DIRECTORY` environment variable (which, again, most people will not need to define);
2. the `TM_PROJECT_DIRECTORY` environment variable (which TextMate provides when we're inside of a project);
3. the directory of the file you were editing when you ran the command.

### Ignoring files

ESLint considers only one `.eslintignore` file when it lints, so make sure that yours is in your working directory, as described in the section above.

**Validate Project** and **Quick Lint** will both skip the linting of files that are matched by `.eslintignore`.

Because you might want to skip automatic linting on some files that don't belong in `.eslintignore`, **Quick Lint** will also additionally ignore anything that matches `TM_ESLINT_IGNORE`, if it's defined. You can give it a Ruby-style [file glob pattern][shell glob syntax]:

```
TM_ESLINT_IGNORE = "/dist/**/*.js"
```
Any file that matches this glob will not get linted on save. (If you're in a project, the `TM_ESLINT_IGNORE` glob is considered **relative to the project root**, so you should not include `$CWD`.)

**Fix File** and **Validate File**, on the other hand, explicitly tell ESLint to _disregard_ `.eslintignore`. If you invoke either of those commands on a file you've got open, the bundle will assume you meant exactly what you said, even if that file would otherwise be ignored.



Command
.eslintignore
TM_ESLINT_IGNORE




Quick Lint
Yes
Yes


Validate File
No
No


Validate Project
Yes
No


Fix File
No
No

### Ignoring files

When you run `eslint` on the command line, ESLint looks for an `.eslintignore` file in whatever directory you run the command from. When the bundle runs the `eslint` command, to determine the right working directory it uses the first value in this list that exists:

1. the `TM_ESLINT_WORKING_DIRECTORY` environment variable, which you should only define in `.tm_properties` if your project root is somehow not where your `.eslintignore` file is kept;
2. the `TM_PROJECT_DIRECTORY` environment variable (which TextMate provides when we're inside of a project);
3. the directory of the file being linted.

If you save a file that's included in your `.eslintignore`, the bundle will skip automatic linting.

If you want to disable automatic linting on certain files that _aren't_ in your `.eslintignore`, you can define `TM_ESLINT_IGNORE` and give it a Ruby-style [file glob pattern][shell glob syntax]:

```
TM_ESLINT_IGNORE = "/dist/**/*.js"
```

Any file that matches this glob will not get linted on save.

Note:

* If you're in a project, the `TM_ESLINT_IGNORE` glob is considered **relative to the project root**, so you should not include `$CWD`.
* Files matched by `.eslintignore` or `TM_ESLINT_IGNORE` are only ignored on save; you can still run `Validate File` or `Fix File` against these files.)

## License

(The MIT License)

Copyright (c) 2016 Andrew Dupont, mit@andrewdupont.net

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

[eslint]: http://eslint.org
[textmate]: https://github.com/textmate/textmate
[shell glob syntax]: http://ruby-doc.org/core-1.9.3/Dir.html#method-c-glob