Commit graph

180 commits

Author SHA1 Message Date
Ryan Cumming
f82ceca0bd Initial Visual Studio Code unit tests
As promised in #1439 this is an initial attempt at unit testing the
VSCode extension. There are two separate parts to this: getting the test
framework working and unit testing the code in #1439.

The test framework nearly intact from the VSCode extension generator.
The main thing missing was `test/index.ts` which acts as an entry point
for Mocha. This was simply copied back in. I also needed to open the
test VSCode instance inside a workspace as our file URI generation
depends on a workspace being open.

There are two ways to run the test framework:

1. Opening the extension's source in VSCode, pressing F5 and selecting
   the "Extensions Test" debug target.

2. Closing all copies of VSCode and running `npm test`. This is started
   from the command line but actually opens a temporary VSCode window to
   host the tests.

This doesn't attempt to wire this up to CI. That requires running a
headless X11 server which is a bit daunting. I'll assess the difficulty
of that in a follow-up branch. This PR is at least helpful for local
development without having to induce errors on a Rust project.

For the actual tests this uses snapshots of `rustc` output from a real
Rust project captured from the command line. Except for extracting the
`message` object and reformatting they're copied verbatim into fixture
JSON files.

Only four different types of diagnostics are tested but they represent
the main combinations of code actions and related information possible.
They can be considered the happy path tests; as we encounter
corner-cases we can introduce new tests fixtures.
2019-06-26 20:31:36 +10:00
Ryan Cumming
5c6ab11453 Tweak isUnusedOrUnnecessary
The first cut was a bit rough with the blanket `unused_*` rule. This
trigger for things like `unused_mut` where the code is used but it's
suboptimal. It's misleading to grey out the code in those cases.
Instead, use an explicit list of things known to be dead code.
2019-06-25 21:44:27 +10:00
Ryan Cumming
d997fd8ea5 Fix comparison of Code Action edit lengths
This happened to work because we always produce a single edit but this
is obviously dubious.
2019-06-25 21:36:55 +10:00
Ryan Cumming
6d6cb25cf4 Rich mapping of cargo watch output
Currently we depend on the ASCII rendering string that `rustc` provides
to populate Visual Studio Code's diagnostic. This has a number of
shortcomings:

1. It's not a very good use of space in the error list
2. We can't jump to secondary spans (e.g. where a called function is
   defined)
3. We can't use Code Actions aka Quick Fix

This moves all of the low-level parsing and mapping to a
`rust_diagnostics.ts`. This uses some heuristics to map Rust diagnostics
to VsCode:

1. As before, the Rust diagnostic message and primary span is used for
   the root diagnostic. However, we now just use the message instead of
   the rendered version.

2. Every secondary span is converted to "related information". This
   shows as child in the error list and can be jumped to.

3. Every child diagnostic is categorised in to three buckets:
    1. If they have no span they're treated as another line of the root
       messages
    2. If they have replacement text they're treated as a Code Action
    3. If they have a span but no replacement text they're treated as
       related information (same as secondary spans).
2019-06-25 21:16:04 +10:00
Aleksei Sidorov
28e9e8d4cf Fix code after "apply suggestions" 2019-06-24 13:50:34 +03:00
Aleksey Sidorov
c40ee089f2
Apply suggestions from code review
Co-Authored-By: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-06-24 13:35:11 +03:00
Aleksei Sidorov
b1bc629b83 Fix tslints 2019-06-24 13:33:37 +03:00
Aleksei Sidorov
4722e6d491 Introduce cargo-watch.check-command 2019-06-24 13:02:20 +03:00
Aleksey Kladov
fed52706de make LRU cache configurable 2019-06-12 13:36:24 +03:00
Pascal Hertleif
1e6ba19015 Make rainbows optional 2019-05-27 11:44:46 +02:00
Pascal Hertleif
5bf3e949e8
Semantic highlighting spike
Very simple approach: For each identifier, set the hash of the range
where it's defined as its 'id' and use it in the VSCode extension to
generate unique colors.

Thus, the generated colors are per-file. They are also quite fragile,
and I'm not entirely sure why. Looks like we need to make sure the
same ranges aren't overwritten by a later request?
2019-05-27 11:26:33 +02:00
Laurențiu Nicola
f1ec88cc56 Improve highlighting of name refs 2019-05-23 15:31:35 +03:00
Laurențiu Nicola
b08362f6d2 Address feedback 2019-05-21 16:28:10 +03:00
Laurențiu Nicola
9ade271a67 Use ThemeColor and add support for light themes 2019-05-21 14:19:08 +03:00
Aleksi Juvani
854dac335d Pass --all-targets to cargo watch 2019-05-21 09:44:28 +03:00
Aleksey Kladov
fa12ed2b8f switch to official extend selection API 2019-04-21 12:13:48 +03:00
Aleksey Kladov
bf7cdec9dd ⬆️ code 2019-04-21 11:32:48 +03:00
Bernardo
422f4ac080 start cargo watch if not started interactively 2019-04-19 20:54:36 +02:00
Bernardo
3d3adabbef recover rustc-watch problemMatchers 2019-04-19 20:54:36 +02:00
Bernardo
1ae6571762 cargo watch start and stop commands 2019-04-19 20:54:36 +02:00
Roberto Vidal
145ee9c3e9 Prettier 2019-04-16 22:11:50 +02:00
Roberto Vidal
3bdd6973d1 Fixes unrelated process termination quirk 2019-04-16 22:07:33 +02:00
Roberto Vidal
12f28f6276 Adds "restart server" command 2019-04-16 22:07:33 +02:00
Roberto Vidal
7c7cfc5f04 Sends cwd info for runnables and code lenses 2019-04-14 10:04:38 +02:00
Roberto Vidal
3507bcb97a Adds support for multiple editor workspaces on initialization
This is a quick, partial fix for #1104
2019-04-14 10:04:38 +02:00
Emil Lauridsen
b8ea91ae2d Fix eslint errors 2019-04-03 11:01:34 +02:00
Emil Lauridsen
3a79490187 Add extra double quotes only on Windows.
As tested by @edwin0cheng, Windows requires the quotes removed in the
previous commit. This commit re-adds the quotes gated by an if statement
on the node environment, so that quotes are only added on Windows.
2019-04-03 10:38:18 +02:00
Emil Lauridsen
4d78c85de2 Fix VSCode cargo-watch functionality on Linux.
As of #1079 the VSCode cargo-watch functionality has been broken on
Linux systems.

The cause seems to be that linux takes the added quotes inside process
arguments literally, so it attempts to make cargo-watch run the command
`cargo "check --message-format json"` with the entire quoted part being
treated as a single long subcommand, which cargo doesn't know how to
handle.

Removing the extra quotes solves the issue.
2019-04-03 09:50:38 +02:00
Edwin Cheng
88bcaf0e18 Add cargo-watch package animation and refactoring 2019-04-03 01:47:10 +08:00
Edwin Cheng
b60e2f779b Fix prettier error 2019-04-02 17:43:09 +08:00
Edwin Cheng
9d26984998 Add terminate process implemntation note 2019-04-02 17:13:14 +08:00
Edwin Cheng
06053a0a76 Add Cargo.toml file check before cargo watch start 2019-04-02 15:03:31 +08:00
Edwin Cheng
02e450f354 Add cargo-watch.check-arguments 2019-04-02 15:03:31 +08:00
Edwin Cheng
ee05eafe6c Add config for cargo-watch trace 2019-04-02 15:03:31 +08:00
Edwin Cheng
b84d0fc1a3 Add proper process teminate method 2019-04-02 15:03:31 +08:00
Edwin Cheng
c894a3e19b Fix prettier error 2019-04-02 15:03:30 +08:00
Edwin Cheng
6971c7f118 Fixed tslint error 2019-04-02 15:03:30 +08:00
Edwin Cheng
ac8f35019b Fix tslint error 2019-04-02 15:03:30 +08:00
Edwin Cheng
b3683df0cd Improve cargo-watch usage 2019-04-02 15:03:30 +08:00
pcpthm
1529eeb1b3 Don't execute cargo watch when popup is dismissed 2019-03-22 09:38:48 +09:00
Ville Penttinen
5c3e9c716e Change enableCargoWatchOnStartup to have three states
This fixes #1005.

Defaults to `ask` which prompts users each time whether to start `cargo watch`
or not. `enabled` always starts `cargo watch` and `disabled` does not.
2019-03-21 13:56:25 +02:00
Igor Matuszewski
34b428cc5e Appease CI 2019-03-18 22:51:01 +01:00
Igor Matuszewski
7c2595c268 Guard auto cargo watch behind a config option 2019-03-18 22:35:47 +01:00
Igor Matuszewski
60cac29964 Separate out the interactive cargo watch procedure 2019-03-18 22:30:23 +01:00
Igor Matuszewski
5c3cc8c95f Reformat using Prettier 2019-03-18 22:15:03 +01:00
Igor Matuszewski
7d2378ed7d Remove unused imports 2019-03-18 21:16:20 +01:00
Igor Matuszewski
4bd6143062 Prefer installing cargo-watch via Task API
This gives us much more fine-grained stdout buffering and ANSI terminal colors.
2019-03-18 21:13:49 +01:00
Igor Matuszewski
21b73f9844 Respect the user-provided label when creating task 2019-03-18 21:04:41 +01:00
Igor Matuszewski
afe9cea640 Ask the user to install and start cargo watch 2019-03-18 20:50:52 +01:00
Igor Matuszewski
9f1ae658db Define a cargo watch task 2019-03-18 20:47:52 +01:00
Igor Matuszewski
bc560a2f5b Remove redundant Runnable.range 2019-03-18 17:53:07 +01:00
Aleksey Kladov
6ef614f785 activate extension if Cargo.toml is present 2019-03-13 16:38:49 +03:00
Lucas Spits
9fe3b36bda
Applied code style of `npm run fix` 2019-03-11 21:22:54 +01:00
Lucas Spits
915c079e26
Fix typescript linting errors 2019-03-11 20:53:56 +01:00
Lucas Spits
de4ad44282
Merge branch 'master' of https://github.com/LDSpits/rust-analyzer into feature/workspace-directory 2019-03-11 20:41:48 +01:00
Lucas Spits
7185c594fe
Retrieve current directory from workspaces 2019-03-11 20:38:46 +01:00
Bernardo
7cf9c34f66 prettier format 2019-03-10 15:20:27 +01:00
Bernardo
536a579f2e simplify watch patterns 2019-03-10 13:35:02 +01:00
Ville Penttinen
0dcb1cb569 Add showWorkspaceLoadedNotification to vscode client
This allows users to control whether or not they want to see the "workspace
loaded" notification.

This is done on the server side using InitializationOptions which are provided
by the client. By default show_workspace_loaded is true, meaning the
notification is sent.
2019-03-06 11:34:38 +02:00
Ville Penttinen
0db95fc812 Allow syntax tree to update when changing files
Previously when using the file based syntax tree, it would not update until a
change had been made in the new file. Now we automatically update the syntax
tree to match the current file.
2019-03-03 22:03:37 +02:00
Ville Penttinen
1b4e0ec1c8 Rename syntaxtree text provider to SyntaxTreeContentProvider 2019-03-03 22:02:19 +02:00
Ville Penttinen
c2d3203d0c Add vscode support for range in SyntaxTreeParams
This enables the client to use a command to either show the live-updating
version of the syntax tree for the current file. Or optionally when a selected
range is provided, we then provide a snapshot of the syntax tree for the range.
2019-03-03 21:43:40 +02:00
Ville Penttinen
5a9a314b10 Change default value of highlightingOn to false 2019-02-26 08:56:11 +02:00
kjeremy
f626733c4a Use named multiline Problem Matcher
Now that https://github.com/Microsoft/vscode/pull/65840 is in the latest
release we can use the first commit from https://github.com/rust-analyzer/rust-analyzer/pull/408
2019-02-18 13:12:54 -05:00
kjeremy
50383ceae1 Specify vscode 1.31 2019-02-12 10:31:11 -05:00
DJMcNab
48d6a52ac1 Update dependencies 2019-02-10 10:32:45 +00:00
DJMcNab
28fd368393 Fix trace and prettier 2019-02-10 10:30:16 +00:00
DJMcNab
9138317021 Add support for a seperate output channel for trace messages 2019-02-10 10:06:33 +00:00
kjeremy
2c7a07e4e8 Update npm packages 2019-02-07 14:55:09 -05:00
Ville Penttinen
a4d0aebcb8 Run prettier 2019-02-07 12:54:41 +02:00
Ville Penttinen
77a4a311fe Add new configuration "enableEnhancedTyping" to control registering of "type" command
This further fixes problems when having a VIM extension (at least vscodevim)
enabled, by not calling `overrideCommand('type', commands.onEnter.handle)` when
enableEnhancedTyping is set to `false`.

The problem is dependent on the order in which extensions are activated, if
rust-analyzer is activated before `vscodevim`, rust-analyzer will register the
`type` command, and when `vscodevim` finally attempts to activate, it will fail
to register the command. This causes `vscodevim` to stop working properly.

This setting allows users to disable the registerCommand `type` in
rust-analyzer, allowing `vscodevim` to work. The setting defaults to `true`.

Currently changing the setting requires reloading of the window.
2019-02-07 12:37:36 +02:00
Jeremy Kolb
6ac4cca6c1 Implement lens for impls and support resolving lenses. 2019-02-04 08:45:33 -05:00
bors[bot]
897e74f089 Merge #704 #705
704: Feat/jinstall lsp r=matklad a=DJMcNab

Add `cargo jinstall-lsp` as a shorthand to include jemalloc support

Also activate the extension when the commands are run which is makes sense to activate.

I still need to work out what `Run` actually does to give it a better name, and other extensions through some voodoo magic are able to hide their commands from the command palette before the extension is activated, which would be a better fix.

705: Pass Documentation up to LSP and add "rust" to our codeblocks there r=matklad a=kjeremy

Fixes #699

Co-authored-by: DJMcNab <36049421+djmcnab@users.noreply.github.com>
Co-authored-by: Jeremy Kolb <kjeremy@gmail.com>
2019-01-30 19:08:06 +00:00
kjeremy
63edfaa9a0 Clear the console when running single tasks 2019-01-30 13:46:31 -05:00
DJMcNab
ce939795ed Add category to the commands 2019-01-29 17:16:14 +00:00
DJMcNab
377ee9d333 Start the extension when rust-analyzer status is run 2019-01-29 17:08:02 +00:00
Aleksey Kladov
d1a67c1174 align command naming 2019-01-28 15:01:22 +03:00
Aleksey Kladov
f6adb85b68 add gc request 2019-01-25 19:11:58 +03:00
Aleksey Kladov
8d68b76ba0 better stats 2019-01-25 16:16:42 +03:00
Aleksey Kladov
0ba7e2eaeb ad status command 2019-01-23 01:24:53 +03:00
Marcus Klaas de Vries
b5466f3fb3 Address issues flagged in review 2019-01-19 15:37:26 +03:00
Marcus Klaas de Vries
afaa26636e Add additional pattern variants 2019-01-19 15:37:25 +03:00
Andrew Ross
1800bfb6e6 Config for raLspServerPath will be overwritten if __RA_LSP_SERVER_DEBUG is set
Changed presentation from clear to reveal silent
Removed the vscode gitignore entry
Added debugging documentation
Added tasks and launch configs
2019-01-19 15:36:54 +03:00
Alan Du
86775c1418 Prettier fix 2019-01-15 11:15:51 -05:00
Alan Du
ca239ace93 Fail Travis on Prettier formatting issue 2019-01-15 11:15:39 -05:00
Jeremy A. Kolb
cd21f0eade Reveal the newly added source change in the editor. 2019-01-14 17:24:49 -05:00
Aleksey Kladov
7642cf5fe7 ⬆️ npm 2019-01-13 21:43:13 +03:00
Jeremy Kolb
2a1cb52c99 npm fix run 2019-01-12 18:49:07 -05:00
Jeremy Kolb
5bf739c824 Move run_single into runnables 2019-01-12 13:54:08 -05:00
Jeremy A. Kolb
faf0037635 Code lens support for running tests 2019-01-11 15:16:55 -05:00
gentoo90
a6e04cfa7f Allow user to set path to ra_lsp_server in vscode settings 2019-01-05 17:28:41 +02:00
Bernardo
4dfc5a6341 fix open of created or renamed file 2019-01-05 12:12:39 +01:00
Aleksey Kladov
d61707b4e1 index stuff produced by macros 2019-01-03 21:29:17 +03:00
Bernardo
3ab328b49a use lsp WorkspaceEdit instead of custom source_file_edits and file_system_edits 2019-01-03 14:20:15 +01:00
Bernardo
96f0683974 named multiline problem patterns are not parsed properly in vscode at the moment 2019-01-01 21:27:36 +01:00
Bernardo
cff9f62d32 fix regex and add rustc-watch problem matcher 2019-01-01 21:27:36 +01:00
Aleksey Kladov
d7440a5f49 highlight macro idents 2018-12-28 18:17:43 +03:00
bors[bot]
b052059f86 Merge #302
302: WIP: Support tracing lsp requests. r=DJMcNab a=DJMcNab

EDIT: We need to work out a better way to handle settings before this can be merged. Help wanted

TODO: Debug why decorations are sent even when highlightingOn is disabled
This makes the log volume so high its impossible to work with anyway.
(Continuation of #84 [#99 only disabled using it, not making sure we don't send it]).

These logs can be used in https://microsoft.github.io/language-server-protocol/inspector/

Co-authored-by: DJMcNab <36049421+djmcnab@users.noreply.github.com>
2018-12-24 13:47:27 +00:00
DJMcNab
ecab036d6f Add a very hacky workaround to not trace decorations requests 2018-12-24 13:43:08 +00:00
frai
0f5d9a0322 Fix analyzer extension fail when there are enabled any VIM extension. 2018-12-22 15:26:18 +02:00