Commit graph

219 commits

Author SHA1 Message Date
Aleksey Kladov
e418889996 underline mutable bindings 2019-07-19 15:07:18 +03:00
Ekaterina Babshukova
4abe03879b highlight mutable variables differently 2019-07-18 18:52:50 +03:00
dependabot[bot]
83ab841bfa
Bump lodash from 4.17.11 to 4.17.14 in /editors/code
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.11 to 4.17.14.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.11...4.17.14)

Signed-off-by: dependabot[bot] <support@github.com>
2019-07-11 23:44:16 +00:00
kjeremy
45d6f47c28 Update vsce to latest 2019-07-03 09:55:48 -04:00
bors[bot]
bb70d18a0a Merge #1458
1458: Run VS Code tests on CI r=matklad a=etaoins

This is actually much faster than I expected; it takes about 13 seconds to download VS Code and run the unit tests. This means the VS Code tests are still significantly faster than the Rust ones.

If this ends up being unreliable we can always remove it later or move it to a separate optional job.

We also need to ignore the `.vscode-test` directory when running `prettier` or it will get upset about some temporary JSON files VS Code creates.

cc @killercup 

Co-authored-by: Ryan Cumming <etaoins@gmail.com>
2019-06-30 10:17:29 +00:00
bors[bot]
fb2534f300 Merge #1459
1459: Include primary span label in VS Code diagnostics r=matklad a=etaoins

In most cases the primary label span repeats information found elsewhere in the diagnostic. For example, with E0061:

```json
{
  "message": "this function takes 2 parameters but 3 parameters were supplied",
  "spans": [{"label": "expected 2 parameters"}]
}
```

However, with some mismatched type errors (E0308) the expected type only appears in the primary span's label, e.g.:

```json
{
  "message": "mismatched types",
  "spans": [{"label": "expected usize, found u32"}]
}
```

I initially added the primary span label to the message unconditionally. However, for most error types the child diagnostics repeat the primary span label with more detail. `rustc` also renders the duplicate text but because the span label and child diagnostics appear in visually distinct places it's not as confusing.

This takes a heuristic approach where it will only add the primary span label if there are no child message lines. For most error types the child messages repeat the primary span label with more detail.

Co-authored-by: Ryan Cumming <etaoins@gmail.com>
2019-06-30 09:54:47 +00:00
Ryan Cumming
067ca38ecb Consider unreachable code to be unnecessary in VSC
This adds `unreachable_code` to the list of diagnostic codes we map to
`Unnecessary` in Visual Studio Code. This is consistent with what the
TypeScript language server does.
2019-06-30 12:13:56 +10:00
Ryan Cumming
8f726b7db6 Include primary span label in VS Code diagnostics
In most cases the primary label span repeats information found elsewhere
in the diagnostic. For example, with E0061:

```
{
  "message": "this function takes 2 parameters but 3 parameters were supplied",
  "spans": [{"label": "expected 2 parameters"}]
}
```

However, with some mismatched type errors (E0308) the expected type only
appears in the primary span's label, e.g.:

```
{
  "message": "mismatched types",
  "spans": [{"label": "expected usize, found u32"}]
}
```

I initially added the primary span label to the message unconditionally.
However, for most error types the child diagnostics repeat the primary
span label with more detail. `rustc` also renders the duplicate text but
because the span label and child diagnostics appear in visually distinct
places it's not as confusing.

This takes a heuristic approach where it will only add the primary span
label if there are no child message lines.
2019-06-30 11:12:56 +10:00
Ryan Cumming
60ba253753 Run VS Code tests on CI
This is actually much faster than I expected; it takes about 13 seconds
to download VS Code and run the unit tests. This means the VS Code tests
are still significantly faster than the Rust ones.

If this ends up being unreliable we can always remove it later or move
it to a separate optional job.

We also need to ignore the `.vscode-test` directory when running
`prettier` or it will get upset about some temporary JSON files VS Code
creates.
2019-06-30 07:12:42 +10:00
bors[bot]
8865db6768 Merge #1454
1454: Fix `cargo watch` code action filtering r=etaoins a=etaoins

There are two issues with the implementation of `provideCodeActions` introduced in #1439:

1. We're returning the code action based on the file its diagnostic is in; not the file the suggested fix is in. I'm not sure how often fixes are suggested cross-file but it's something we should handle.

2. We're not filtering code actions based on the passed range. The means if there is any suggestion in a file we'll show an action for every line of the file. I naively thought that VS Code would filter for us but that was wrong.

Unfortunately the VS Code `CodeAction` object is very complex - it can handle edits across multiple files, run commands, etc. This makes it complex to check them for equality or see if any of their edits intersects with a specified range.

To make it easier to work with suggestions this introduces a `SuggestedFix` model object and a `SuggestFixCollection` code action provider. This is a layer between the raw Rust JSON and VS Code's `CodeAction`s. I was reluctant to introduce another layer of abstraction here but my attempt to work directly with VS Code's model objects was worse.

Co-authored-by: Ryan Cumming <etaoins@gmail.com>
2019-06-29 09:50:56 +00:00
Ryan Cumming
50c6ab709e Comment on the key of suggestedFixes
This isn't immediately obvious without looking at the users of the map
2019-06-29 19:46:20 +10:00
Ryan Cumming
c8fc00258d Add noUnusedLocals to VsCode tsconfig
`tslint` doesn't catch this because TypeScript has had this check
builtin since 2.9. However, it's disabled by default so right now
nothing is checking for unused variables.
2019-06-29 18:00:22 +10:00
Ryan Cumming
abc0784e57 Fix cargo watch code action filtering
There are two issues with the implementation of `provideCodeActions`
introduced in #1439:

1. We're returning the code action based on the file its diagnostic is
   in; not the file the suggested fix is in. I'm not sure how often
   fixes are suggested cross-file but it's something we should handle.

2. We're not filtering code actions based on the passed range. The means
   if there is any suggestion in a file we'll show an action for every
   line of the file. I naively thought that VS Code would filter for us
   but that was wrong.

Unfortunately the VS Code `CodeAction` object is very complex - it can
handle edits across multiple files, run commands, etc. This makes it
complex to check them for equality or see if any of their edits
intersects with a specified range.

To make it easier to work with suggestions this introduces a
`SuggestedFix` model object and a `SuggestFixCollection` code action
provider. This is a layer between the raw Rust JSON and VS Code's
`CodeAction`s. I was reluctant to introduce another layer of abstraction
here but my attempt to work directly with VS Code's model objects was
worse.
2019-06-29 17:39:36 +10:00
zbelial
dc7cec8cf4 Add show syntax tree function to emacs 2019-06-29 09:12:16 +08:00
Ryan Cumming
a8a1bc4b15 Extract lint scopes from cargo watch
Currently all of our VS Code diagnostics are given the source of
`rustc`. However, if you have something like `cargo-watch.command` set
to `clippy` it will also watch for Clippy lints. The `rustc` source is a
bit misleading in that case.

Fortunately, Rust's tool lints (RFC 2103) line up perfectly with VS
Code's concept of `source`. This checks for lints scoped to a given tool
and then splits them in to a `source` and tool-specific `code`.
2019-06-27 08:52:22 +10:00
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
Florian Diebold
882daf4245 ra-emacs-lsp: Fix company-lsp snippet handler override 2019-06-14 20:58:03 +02:00
Aleksey Kladov
fed52706de make LRU cache configurable 2019-06-12 13:36:24 +03:00
Florian Diebold
f2c191e973 Add status buffer function to emacs integration
Also fix a minor race condition in the 'extend selection' initialization.
2019-05-29 23:00:56 +02: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
Aleksey Kladov
23dd53eb35
kill ra.el: it is superseeded by the lsp integraion 2019-03-30 17:52:40 +03:00
Florian Diebold
156b1ddf67 Fix emacs-lsp runnables support with native json
(In that case args is a vector, which string-join doesn't like.)
2019-03-28 21:32:17 +01: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
Aleksey Kladov
91203699ec introduce docs dir 2019-03-20 09:37:51 +03: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
Florian Diebold
c656bf3946 Fix ra-emacs-lsp for newest lsp-mode with native json support 2019-03-14 22:08:37 +01:00
Florian Gilcher
6d4038a2c7
Fix typo 2019-03-13 15:23:22 +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
Florian Diebold
d7f113e7a6 emacs: Fix (void-variable rust-analyzer--last-runnable) 2019-03-03 03:00:17 +01:00
Ville Penttinen
5a9a314b10 Change default value of highlightingOn to false 2019-02-26 08:56:11 +02:00
Florian Diebold
da8976d865 emacs-lsp: Add runnables support 2019-02-23 13:42:20 +01: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
Florian Diebold
d682ea8858 Add my emacs configuration
This relies on emacs-lsp instead of eglot, so I didn't want to just add it to
the other one.
2019-02-16 15:39:44 +01:00
bors[bot]
abc5d377e2 Merge #807
807: Specify vscode 1.31 r=matklad a=kjeremy

This is for #796 

It doesn't seem to fix the problem if you manually install the extension but it is the "right thing to do".

Co-authored-by: kjeremy <kjeremy@gmail.com>
2019-02-12 15:33:02 +00:00
kjeremy
50383ceae1 Specify vscode 1.31 2019-02-12 10:31:11 -05:00
Aleksey Kladov
72a122092b mention no compatability gurantee 2019-02-12 18:28:39 +03:00
Matthias Einwag
943c064ffc Mention node.js requirement in readme 2019-02-10 13:09:33 -08: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