According to
https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#textDocument_codeAction,
the response to textDocument/codeAction is:
(Command | CodeAction)[] | null
and the code only handled the case where it was a CodeAction that either
specified an edit or a command, but didn't handle a direct Command.
Note that the specification also says that both can be specified and
then the edit is applied first, then the command. Furthermore, there
seems to be some hacky code handling arguments directly, which I suspect
is non-standard and only works with a specific LSP server that happens
to pass the edits in the arguments unmodified.
It is easier to explain this fix with an example:
* tsserver and LSPs ask for error information when you want to fix
error. tsserver `ts@getCodeFixes` command needs tsserver error code.
* now let's imagine that user has eslint and tsserver in use. Sometimes
both can report same error in different way.
* Now there is no guarantee which error will come first and if eslint
error comes first then tsserver will not return code fixes as we are
passing wrong error code to it.
This fix will return proper error code based on linter.
Without this, we have one `pyre` process running across different pyre
projects. With this change, files in different projects can be linted
with pyre at the same time.
Co-authored-by: Oliver Ruben Albertini <ora@fb.com>
It's necessary to provide a `-l` option to pyre with the closest parent
directory containing a `.pyre_configuration.local` file, or simply
change directory (cwd) to the root of the pyre project. Thanks to Ken
Verbosky for the code that fixes this.
Error seen when not using such a solution:
```
1031.473923 on 6: Dropping message 'ƛ Background task unexpectedly quited: Invalid configuration: Cannot find any source files to analyze. Either `source_directories` or `targets` must be specified.
```
Issue with this approach is that if you are editing files under
different projects, the `pyre persistent` process is not re-created for
each file. We have to do `:ALEStopAlllsps` in order for the process to
start with the new working directory.
Co-authored-by: Oliver Ruben Albertini <ora@fb.com>
More recent versions of thriftcheck use a more compliant GCC-style
output format which includes a space before the "severity" group.
This matches similar tools, like shellcheck.
This change adjusts the handler's pattern to parse this format in a
backwards-compatible way (even though backwards compatibility isn't
critical long-term as thriftcheck itself is close to its 1.0 release).
* Fix truncated echo
In typescript, when putting the cursor on a `>` character of an arrow
function, the displayString body comes back as an empty string, and
means the split operation has 0 items, causing a failure when attempting
to call TruncatedEcho.
Even if there's a better fix, I'd assume this is a good safety since we
are injesting external data.
* Convert to use `empty()`
This User autocommand is trigged immediately after an LSP process is
successfully initialized. This provides a way to perform any additional
initialization work, such as setting up buffer-level mappings.
* Add eslint as linter for JSON, JSONC and JSON5
Use the same lint configuration as eslint for javascript.
* Add documentation for JSON* eslint support
* Fix spacing in documentation
* Update docs to be unopinionated about plugins
Remove any preference for eslint plugins, since there are more thant one
that would work
* Reorder languages and tools in alphabetic order
* Fix misalignment
* Change orders to pass the tests
Look for all linters that have "lint_file" set to 1 and verify tools
that have it have the :floopy_disk: icon set and those that don't do not
have it.
Correspondingly added/removed !! on
ale-supported-languages-and-tools.txt file.
Co-authored-by: Horacio Sanson <horacio@allm.inc>
- Add .vintrc.yaml configuration that disables the scriptencoding check
(ProhibitMissingScriptEncoding) that is raised randomly.
- Upgrade vint to 0.3.21. Project seems to have stopped here and 0.4.0
was never released.
- Ensure the run-test scripts use the correct docker image (e.g. add tag)
.
Co-authored-by: Horacio Sanson <horacio@allm.inc>
For some reason CI tests started failing with these errors:
> ale_linters/eruby/erb.vim:1:1: Use scriptencoding when multibyte char exists (see :help :scriptencoding)
> ale_linters/mail/languagetool.vim:1:1: Use scriptencoding when multibyte char exists (see :help :scriptencoding)
Not sure at which point or what changed for this to happen but this MR
fixes it by removing the multibyte chars present on the problem files.
Co-authored-by: Horacio Sanson <horacio@allm.inc>
md5sum isn't available by default on macOS. Instead, it ships the
BSD-style md5(1) command, which does the same thing but with different
arguments.
With this change, run-tests works out-of-the-box on macOS.
* feat(deno): move init options to handlers
* feat(deno): add deno lsp support for js files
* feat(deno): use default map option
* feat(docs): add deno import map option
* feat(deno): add tests for importMap option
* fix(deno): use full path in importMap
* feat(deno): remove deno as linter for js, separate PR
* fix(deno): test for executable
* fix(deno-test): include filename to simplify function
* Add poetry support to python linters and black fixer.
* Update python.vim to detect poetry project.
* Update ale.vim, add an option for poetry `g:ale_python_auto_poetry`.
* Update ale-python.txt, add poetry support.
* Add and update poetry related tests.
Co-authored-by: unc0 <unc0@users.noreply.github.com>
* implement vim popups for preview
Details on implementation
-------------------------
- we make use of the |popupwin| api
- we split implementations (Nvim* vs. Vim* prefix) and call the right
one based on has('nvim')
- we follow a similar structure in each function, using the relevant API
- popup_list, win_execute, popup_settext in VimShow
- popup_create in VimCreate
- popup_close in VimClose
Some differences
----------------
- we DON'T have VimPrepareWindowContent because we use arguments to
popup_create for borders, padding, etc., and it also takes care of
buffer creation.
- we follow the protocol of setting and using w:preview for information,
but we only need the ID
- InsertEnter is the only autocommand required, because of
popup_create's moved argument. Any cursor movement with 'any' will
close the popup. This in turns means VimClose is only called from
InsertMode, so no mode-restoration necessary
- we don't tweak too much in the buffer because vim's popup buffers
already have most relevant settings and aren't editable without
calling popup functions.
- I enabled scrollbars, close buttons, dragging, and resizing
- vim popups get as big as they need to by default, so no worrying about
truncating/hiding/size
Note: we might want to consider changing w:preview to w:ale_preview to
avoid clashes if someone else tries to use the same variable
* floating window: document that vim supports it
* lint: fix indent/cont. lines
* Fix 3801 - Add ALEDummySign some width.
Due to changes in NeoVim 0.5 the g:ale_sign_column_always configuration
stopped working.
This PR sets the ALEDummySign to a blank space so when g:
ale_sign_column_always is set we have a sign with 1 width allowing the
configuration to work as before.
https://github.com/neovim/neovim/issues/13635
* Fix visual artifact on dummy sign
* Fix visual artifact on dummy sign (attempt 2)
Co-authored-by: Horacio Sanson <horacio@allm.inc>
* Correct typo in a config file filename.
.tool_versions should be .tool-versions
* Correct typo in config file names.
.tool_versions should be .tool-versions
* racket: support racket-langserver lsp
* racket-langserver: find highest dir with init.rkt
* autoload/ale/racket: re-indent to 4 spaces
* racket: lint: sort supported tools
* racket: lint: function!
This is _not_ needed anymore, but the lint wants it. See :help E127
* racket-langserver: do not use new dict format
* racket: lint: use snake_case
* add tests for racket-langserver
* racket-langserver tests: correct result values
* Also check for asdf-vm's .tool_versions file
A minimal python project may only be specifying a python version using a version management tool like asdf-vm, without providing other common python project configuration files. asdf-vm creates a single .tool_versions file in the managed directory. By checking for .tool_versions in addition to other common python config files we ensure that python linters (whose behaviour typically depends on a particular python version) will run with the same version of python used by the project. This will also be the same python version used by vim itself when it is run from inside the project's directories.
* add .tool_versions to ale-python-root documentation
This reflects the corresponding change to autoload/ale/python.vim