* Improve performance when using gometalinter
Before this change when I opened a big project that had 6000+ warnings/errors it took ages to get the actual warnings/errors and it caused my CPU to be busy for quite some time. The call to gometalinter alone took about 24 seconds, but after that vim was struggling as well.
After this change the gometalinter call just takes 2 seconds and nothing noticable happens with the CPU and/or vim.
* Removed obsolete test
This logic is no longer done by the `ale` plugin, but by `gometalinter` itself.
* Initial attempt at an rpmlint linter.
* Add some basic documentation.
* Play with indentation in the test file.
* Another attempt to fix the rpmlint test.
* Hopefully this does it.
Linter is disabled by default (see g:ale_go_gometalinter_enabled) as it
conflicts with a number of established ALE linters (golint, govet,
gosimple, staticcheck, etc).
* Added ruby mri linter
* Added to the list of supported linters
* Async and now with 4 spaces
* Vader tests for ruby
* Match style choices
* Vader test for the Ruby handler now works and passes
* Adds options to foodcritic linter
Adds a way to pass command line options to the foodcritic command and
documentation about it.
* Creates a simple test for foodcritic command callback
This test simply runs the GetCommand function for the foodcritic linter
and feeds it with some test variables to assert the command line is
being created/escaped correctly.
* Makes foodcritic linter use a command callback
Following review comments, changes the foodcritic linter to use a
`GetCommand` callback for the `command_callback` linter option.
Makes sure that `~` are escaped: flags on foodcritic command line are
negated by adding a `~` in front of the specific cop name:
```
foodcritic -t ~FC011
```
But the way the commands are executed cause foodcritic to fail (since
tilde is recognized as home directory).
* Fixes the doc to include new variables
* Remove 'col' from linters where it is hardcoded to 1
When 'col' is 1, the first column will get highlighted for no reason. It
should be 0 (which is the default).
In the scalac linter there was also a check about the outcome of
`stridx`. It would set l:col to 0 if it was -1, and then it uses
`'col': l:col + 1` to convert the outcome of `stridx` to the actual
column number. This will make 'col' equals 1 when there is no match. We
can remove the check because `-1 + 1 = 0`.
* Remove outdated comments about vcol
vcol was added as a default, and the loclists that follow these comments
do not contain 'vcol' anymore
* Fix problems with nim check
- Multi file errors are not shown in the same buffer
- Fixes parsing of error type that contain ':'
* Remove redundant fnameescape
In particular, if we're working with a leex (.xrl) or yecc (.yrl) source
file, erlc would otherwise generate the corresponding .erl file in the
current directory (often the project root), which is generally not what
we want.
Unconditionally writing erlc output to a temporary directory also
matches Flycheck's behavior.
* PHP: Fix column matching for unexpected single quotes
Unexpected single quotes resulted in an empty match, because PHP
surrounds the errors with quotes, and we check for the next quote to be
the ending delimiter.
For example: an unexpected string 'foo' would be presented as
`unexpected ''foo''`, and then the match would be `''`. The inner part
of that match is an empty string.
This adds a check for the keyword "expecting". Any quote after
"expecting" won't be matched, so we can use greedy matching instead of
non-greedy.
* PHP: Use "very magic"
The pattern started to get unreadable
Also replaced non-greedy matching (`\{-}`) by greedy matching, because
we don't need to match non-greedily anymore and it reads a little nicer.
* PHP: Add tests for column matches
And with that, also a test for unexpected single quotes.
* Fix Credo's line-matching pattern
In d3e7d3d5, the line matching pattern was changed to handle filenames
other than `stdin`. Unfortunately, this broke the pattern's ability to
reliably extract both line and column numbers because the latter is an
optional match and the filename portion was very greedy. This resulted
in line numbers being discarded (treated as part of the filename) and
column numbers being interpreted as line numbers.
This change simplifies the pattern to only anchor on the line's suffix,
ignoring the filename portion entirely.
Alternatively, we could use vim's `\f` ("file name characters") class,
but that could still run into problems when `:`'s naturally appear in
the filename.
* Add a Vader test case for the Credo handler
This adds support for the hdevtools haskell linter
https://github.com/hdevtools/hdevtools
The output for hdevtools is near identical to the ghc output so this
also extracts the ghc handler into the handle file and adds tests
* Add testing for previous major release of ghc
This adds support for the hdevtools haskell linter
https://github.com/hdevtools/hdevtools
The output for hdevtools is near identical to the ghc output so this
also extracts the ghc handler into the handle file and adds tests
* A try at javac support for ALE
* Small cleanup: moved '/tmp/java_ale' string into script var
* Fixed Travis-CI build failing on autocmd not being in augroup and stupid omission
* One more fix for Travis-CI
* For some reason, expandtab was not set
* Indentation and removal of header guard.
Used examples from ale_linters/c/gcc.vim and
ale_linters/javascript/eslint.vim for the indentation of string concat blocks.
By default, Credo attributes input from STDIN as though it came from a
file named `stdin`. This change passes the buffer's filename, too, so
that Credo can use that information when applying its configuration.
This is a nice improvement because files like `mix.exs` are normally
excluded from Credo-based linting. Previously, ALE would show lint
warnings for those files as they were edited. Now, they are correctly
honor the Credo configuration and don't produce lint output.
* try fixing go build
* cache some system calls
* fix /dev/null
* use chained commands, use `go test -c` instead of `go tool compile`
* fix some unescaped shell commands
* fix a bug with explicitly setting GOPATH
* implement changes requested in code review. handle errors from multiple files. fix issue when starting a new package
* run `go env` as a job
* ensure all functions return the proper type
* fix loclist line numbers in some cases
* remove multibuffer support for now
In my previous change, I updated the Rubocop linter to pass the filename
to Rubocop. This change was tested on a file I expected Rubocop to
ignore and the experience in vim was as I expected. However, I soon
found that ALE wasn't finding errors in files that should not be
ignored. After investigation, I found a few issues that this commit
fixes:
1. We were not properly passing the current filename. We now use
`expand` to get the filename.
2. The regular expression used in the callback was expecting the static
value of `_` for the filename in output. We now use a looser regular
expression that begins matching on the first `:`.
3. The linter was defined statically. By using the current filename when
defining the command the linter would always use the filename of the
first Ruby file the user opened. We now use a `command_callback` to
inject the proper filename.
I tested these changes on a configuration with included and excluded
files and found it to work as I expected. Apologies for the earlier
incorrect change.
When using `--stdin`, Rubocop requires that you also pass the associated
file name. ALE was previously passing `_` as the filename. By passing
the actual relative path to the file and enabling the
`--force-exclusion` option, we can get Rubocop to respect excluded files
in the configuration.
Closes#197
* Add erlc lint for Erlang (#248)
* Ignore certain errors in Erlang .hrl files (#248)
A .hrl file does not need to have a -module definition. Additionally, it
is common to have unused elements in such a file, as the entities will
be used in a file including the header.
* Address change requests to Erlang linter