Commit graph

503 commits

Author SHA1 Message Date
Aleksey Kladov
8bb4380448 Fix tests 2018-10-20 22:43:36 +03:00
Aleksey Kladov
6e88aaef5d use pythonic import order
use std
// blank line
use extern crates
// blank line
use crate::{}
2018-10-20 22:38:52 +03:00
Aleksey Kladov
8eea10e3ab actually check for cancelation 2018-10-20 22:35:55 +03:00
Aleksey Kladov
71cbdddf1c make file-symbols query cancelable 2018-10-20 22:29:26 +03:00
Aleksey Kladov
e74bf6e56e mark module queries as cacelable 2018-10-20 22:15:03 +03:00
Aleksey Kladov
9fb41716de make more things cancelable 2018-10-20 22:09:12 +03:00
Aleksey Kladov
998f2ae762 remove job tokens 2018-10-20 22:02:41 +03:00
Aleksey Kladov
c4b0d3cd56 make parent module cancelable 2018-10-20 21:52:49 +03:00
Aleksey Kladov
61518580ed introduce cancelable 2018-10-20 21:46:17 +03:00
Alan Du
0857c22f26 Revert "clippy: Fix new_ret_no_self"
This reverts commit 2ae9dfa812.
2018-10-20 12:29:25 -04:00
Aleksey Kladov
73dd870da2 update salsa 2018-10-20 18:43:02 +03:00
bors[bot]
2ded93a78a Merge #143
143: Implement Find All References and Rename for local variables r=matklad a=kjeremy

Expose `find_all_refs` in `Analysis`. This currently only works for local variables.

Use this in the LSP to implement find all references and rename.

Co-authored-by: Jeremy A. Kolb <jkolb@ara.com>
2018-10-20 12:51:30 +00:00
Jeremy A. Kolb
9f9e41885c LSP: Add support for prepareRename 2018-10-19 15:25:10 -04:00
Jeremy A. Kolb
2844c8fdfa Handle renaming of local variables 2018-10-18 17:56:22 -04:00
Jeremy A. Kolb
3746689e9d Implement Find All References for local variables 2018-10-18 13:40:12 -04:00
Alan Du
6dd3fa6a94 clippy: cast_lossless 2018-10-17 19:42:23 -04:00
Alan Du
a5da770ec6 Fix function calls 2018-10-17 19:42:23 -04:00
Alan Du
fc8024de51 clippy: type_complexity 2018-10-17 19:42:23 -04:00
Alan Du
bc774fe6cf clippy: needless_lifetimes 2018-10-17 19:42:23 -04:00
Alan Du
2ae9dfa812 clippy: Fix new_ret_no_self 2018-10-17 19:42:23 -04:00
Alan Du
2268a2f8c6 Silence clippy::derive_hash_xor_eq
Manually implement PartialEq
2018-10-17 19:42:23 -04:00
Alan Du
4e8ea94e2b Remove Copy trait on LeafAtOffset
Because it's a stateful iterator, it's easier to explicitly clone it
when necesary.

Fixes clippy:clone_on_copy
2018-10-17 19:42:23 -04:00
Alan Du
d493a4476c clippy: Use if lets and remove redundant returns 2018-10-17 19:42:23 -04:00
Alan Du
5db663d61f Clippy lint: single-character string constant 2018-10-17 19:42:23 -04:00
Aleksey Kladov
00cdde2c52 Update rowan 2018-10-17 19:52:25 +03:00
Aleksey Kladov
2f4a248f80 rename gen-kinds to gen-syntax 2018-10-16 21:17:19 +03:00
Aleksey Kladov
b43bcd43c6 fix tests 2018-10-16 20:53:19 +03:00
Aleksey Kladov
0b6d4983de Switch to published teraron 2018-10-16 20:36:45 +03:00
Aleksey Kladov
514aa3cf85 extract teraron 2018-10-16 20:31:30 +03:00
Jeremy A. Kolb
61f3a438d3 Cargo Format
Run `cargo fmt` and ignore generated files
2018-10-16 09:41:10 -04:00
bors[bot]
39cb6c6d3f Merge #128
128: Add a test to verify if the generated codes are up-to-date. r=matklad a=mominul

This test checks if the generated codes are up-to-date every time during `cargo test`.

I have confirmed that the test works by manually editing the `grammar.ron` file.

Closes #126 

Thanks!

Co-authored-by: Muhammad Mominul Huque <mominul2082@gmail.com>
2018-10-16 12:24:26 +00:00
Muhammad Mominul Huque
2c4cfb297e
take &Path instead of PathBuf 2018-10-16 15:36:53 +06:00
Aleksey Kladov
f30a7deff1 switch to salsa release 2018-10-15 23:57:46 +03:00
Aleksey Kladov
fc31ddd303 Simplify 2018-10-15 22:59:18 +03:00
Aleksey Kladov
85ff328d31 remove clones 2018-10-15 22:36:08 +03:00
Aleksey Kladov
bbcd998433 make analysis sync 2018-10-15 22:29:24 +03:00
Aleksey Kladov
76c51fae77 Tweak writable root API 2018-10-15 22:05:21 +03:00
Aleksey Kladov
8c88900fa9 remove resolver from world 2018-10-15 22:01:50 +03:00
Aleksey Kladov
ee69fddf02 Drop dead code 2018-10-15 21:56:01 +03:00
Muhammad Mominul Huque
9d9e637ef3
Refactor the constants 2018-10-16 00:54:27 +06:00
Aleksey Kladov
7503c5528f fix tests 2018-10-15 21:54:12 +03:00
Aleksey Kladov
062019590d Switch to the master of salsa 2018-10-15 21:25:54 +03:00
Aleksey Kladov
d783371b86 migrate modue map to salsa 2018-10-15 21:20:20 +03:00
Aleksey Kladov
d8aee31a60 start salsa migration 2018-10-15 21:19:49 +03:00
Aleksey Kladov
93d77e9b22 remove our own copy of salsa
salsa-rs/salsa is faster and more type safe
2018-10-15 21:12:19 +03:00
Aleksey Kladov
64b879d6a9 add salsa dep, break the world 2018-10-15 21:12:06 +03:00
Aleksey Kladov
9a98d8e99a regenerate 2018-10-15 20:54:07 +03:00
Aleksey Kladov
376639c70f Parse crate paths in expressions 2018-10-15 20:52:56 +03:00
Muhammad Mominul Huque
ce73df065f
Use CARGO_MANIFEST_DIR for locating the grammar.ron file 2018-10-15 23:52:11 +06:00
Aleksey Kladov
bb298158eb migrate analysis and server to 2018 2018-10-15 20:15:53 +03:00
Aleksey Kladov
2dd6858d03 switch ra_cli to 2018 2018-10-15 20:06:02 +03:00
Aleksey Kladov
1624bf2d7f switch editor to 2018 2018-10-15 20:05:26 +03:00
Aleksey Kladov
9434920648 switch base crates to 2018 2018-10-15 20:00:54 +03:00
Aleksey Kladov
171c176833 Run cargo fix 2018-10-15 19:55:32 +03:00
bors[bot]
a230b438e0 Merge #127
127: Improve folding r=matklad a=aochagavia

I was messing around with adding support for multiline comments in folding and ended up changing a bunch of other things. 

First of all, I am not convinced of folding groups of successive items. For instance, I don't see why it is worthwhile to be able to fold something like the following:

```rust
use foo;
use bar;
```

Furthermore, this causes problems if you want to fold a multiline import:

```rust
use foo::{
  quux
};
use bar;
```

The problem is that now there are two possible folds at the same position: we could fold the first use or we could fold the import group. IMO, the only place where folding groups makes sense is when folding comments. Therefore I have **removed folding import groups in favor of folding multiline imports**.

Regarding folding comments, I made it a bit more robust by requiring that comments can only be folded if they have the same flavor. So if you have a bunch of `//` comments followed by `//!` comments, you will get two separate fold groups instead of a single one.

Finally, I rewrote the API in such a way that it should be trivial to add new folds. You only need to:

* Create a new FoldKind
* Add it to the `fold_kind` function that converts from `SyntaxKind` to `FoldKind`

Fixes #113 

Co-authored-by: Adolfo Ochagavía <github@adolfo.ochagavia.xyz>
2018-10-15 16:48:17 +00:00
Muhammad Mominul Huque
33b378797c
Show how to generate code with error message 2018-10-14 20:58:53 +06:00
Muhammad Mominul Huque
114e9a2d74
create cli.rs and make the tests passing 2018-10-14 20:32:57 +06:00
Adolfo Ochagavía
2bc9e9f327 Improve tests 2018-10-13 21:33:15 +02:00
Adolfo Ochagavía
c5069eeef5 Only fold groups of similar comments 2018-10-13 15:37:44 +02:00
Adolfo Ochagavía
4b3737510b Cleanup fold code and split logic to fold single elements 2018-10-12 19:20:58 +02:00
Jeremy A. Kolb
c9909f42ba A FnDescriptor shouldn't exist without a name 2018-10-12 07:54:57 -04:00
Jeremy A. Kolb
3ac5199755 Regenerate 2018-10-12 07:43:37 -04:00
Adolfo Ochagavía
ee0a6bf053 Fold multiline comments 2018-10-12 08:59:12 +02:00
Jeremy A. Kolb
f8a2b53304 Language Server: textDocument/signatureHelp
Implements a pretty barebones function signature help mechanism in
the language server.

Users can use `Analysis::resolve_callback()` to get basic information
about a call site.

Fixes #102
2018-10-11 16:40:46 -04:00
bors[bot]
2ba6f18586 Merge #122
122: Use rustc-hash crate r=matklad a=mominul

Replace std's HashMap, HashSet with FxHashMap and FxHashSet.

Closes #121 

Thanks!

Co-authored-by: Muhammad Mominul Huque <mominul2082@gmail.com>
2018-10-11 18:28:44 +00:00
Muhammad Mominul Huque
dc2b30e9b6
Replace HashMap, HashSet with FxHashMap and FxHashSet 2018-10-12 00:07:44 +06:00
bors[bot]
77e9bf9b5f Merge #116
116: Collapse comments upon join r=matklad a=aochagavia

Todo:

- [x] Write tests
- [x] Resolve fixmes
- [x] Implement `comment_start_length` using the parser

I left a bunch of questions as fixmes. Can someone take a look at them? Also, I would love to use the parser to calculate the length of the leading characters in a comment (`//`, `///`, `//!`, `/*`), so any hints are greatly appreciated.

Co-authored-by: Adolfo Ochagavía <aochagavia92@gmail.com>
Co-authored-by: Adolfo Ochagavía <github@adolfo.ochagavia.xyz>
2018-10-11 15:43:34 +00:00
Adolfo Ochagavía
6fe77db413 Remove smart multiline comment join 2018-10-11 17:16:12 +02:00
Adolfo Ochagavía
92f5ca64ae Add tests 2018-10-11 17:11:59 +02:00
Adolfo Ochagavía
5508c91b3e Remove nesting 2018-10-11 16:45:52 +02:00
Adolfo Ochagavía
f88e13f539 Use Comment wrapper 2018-10-11 16:25:35 +02:00
bors[bot]
9b155c8976 Merge #118
118: Remove error publishing through publishDecorations r=matklad a=aochagavia

The errors are already reported by `publishDiagnostics`

Closes #109 

Co-authored-by: Adolfo Ochagavía <aochagavia92@gmail.com>
2018-10-11 09:18:33 +00:00
Reinier Maas
6abecf76e5 Update crates/ra_syntax/src/ast/generated.rs
effect of running cargo gen-kinds
2018-10-10 17:26:01 +02:00
Reinier Maas
c579b47b4a
Update generated.rs.tera
Removing `-` for #114
2018-10-10 17:18:21 +02:00
Adolfo Ochagavía
edd162bda8 Report errors only once 2018-10-10 16:59:46 +02:00
Adolfo Ochagavía
26d34cc443 Remove error publishing through publishDecorations 2018-10-10 16:49:32 +02:00
Adolfo Ochagavía
27a86cb7df Collapse comments upon join 2018-10-10 12:37:06 +02:00
bors[bot]
31c8ebb743 Merge #106
106: Add on-enter handler r=matklad a=matklad

Now, typing doc comments is much more pleasant

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2018-10-09 16:52:48 +00:00
Aleksey Kladov
2b956fd3a8 Add on-enter handler
Now, typing doc comments is much more pleasant
2018-10-09 19:52:06 +03:00
Aleksey Kladov
5d1dae83a1 Switch to absolute offsets for extend comment word 2018-10-09 18:53:35 +03:00
Aleksey Kladov
239213a3db Prepare gen_lsp_server for publishing 2018-10-09 12:55:23 +03:00
Aleksey Kladov
a05e09e9c5 Attach comments smartly 2018-10-08 17:36:38 +03:00
Aleksey Kladov
b642e6c645 replace loop with iterators 2018-10-08 15:46:14 +03:00
Aleksey Kladov
86a7ac2d31 Simplify event processing 2018-10-08 15:44:00 +03:00
Aleksey Kladov
3c12d38a32 tfn snippet 2018-10-08 14:08:31 +03:00
bors[bot]
e4fdfd1501 Merge #98
98: WIP: Add resolve_local_name to resolve names in a function scope r=kjeremy a=kjeremy

First step to resolving #80 

Co-authored-by: Jeremy A. Kolb <jkolb@ara.com>
2018-10-07 17:01:57 +00:00
Jeremy A. Kolb
ff1b2da502 Remove functional noop 2018-10-06 13:41:33 -04:00
Jeremy A. Kolb
828bd73195 Resolve local names first 2018-10-06 12:02:15 -04:00
Jeremy A. Kolb
1d4c767879 WIP: This doesn't currently work but I also don't think it's the right abstraction 2018-10-05 15:21:40 -04:00
Jeremy A. Kolb
91312a9ff9 Add resolve_local_name to resolve names in a function scope 2018-10-05 10:53:17 -04:00
Daniel McNab
80eefcbc05 Add cargo gen-kinds documentation 2018-10-04 21:43:58 +01:00
bors[bot]
81bf190f7a Merge #94
94: Extend comments by single word first r=matklad a=kjeremy

Fixes #88

Co-authored-by: Jeremy A. Kolb <jkolb@ara.com>
2018-10-04 14:25:53 +00:00
Jeremy A. Kolb
a30039ba62 Pull casts out of TextUnit 2018-10-04 09:39:02 -04:00
Jeremy A. Kolb
334d266b77 Simplify extend_single_word_in_comment 2018-10-04 09:35:55 -04:00
bors[bot]
7a025ad201 Merge #93
93: Support leading pipe in match arms r=matklad a=DJMcNab

This adds support for match arms of the form:
```rust
<...>
| X | Y => <...>,
| X => <...>,
| 1..2 => <...>,
etc
```

# Implementation discussion

This just naïvely 'eats' a leading pipe if one is available. The equivalent line in the reference `libsyntax` is in [`parse_arm`](441519536c/src/libsyntax/parse/parser.rs (L3552)).

As noted in the comment linked above, this feature was formally introduced as a result of rust-lang/rfcs#1925. This feature is in active use in the [`rust-analyzer` codebase](c87fcb4ea5/crates/ra_syntax/src/syntax_kinds/generated.rs (L231))

I have added some tests for this feature, but maybe more would be required

EDIT: Always looking for feedback - is this PR description over-engineered?

Co-authored-by: Daniel McNab <36049421+djmcnab@users.noreply.github.com>
2018-10-04 07:02:19 +00:00
Jeremy A. Kolb
4c2be06a7e Extend comments by single word first
Fixes #88
2018-10-03 17:04:00 -04:00
Daniel McNab
a55ef9b3ed Support leading pipe in match arms 2018-10-03 21:47:03 +01:00
Aleksey Kladov
1a2a8dec14 Make siblings an inherent method 2018-10-02 18:14:33 +03:00
Aleksey Kladov
d323c81d5c make ancestors and descendants inherent 2018-10-02 18:02:57 +03:00
Aleksey Kladov
dccaa5e45e use aliases 2018-10-02 17:50:56 +03:00
Aleksey Kladov
a261a1836b Move to rowan for syntax tree impl 2018-10-02 17:09:23 +03:00
Aleksey Kladov
804e29402a fix code actions 2018-09-29 21:59:34 +03:00
Aleksey Kladov
baaf027da0 support 2018 paths 2018-09-29 14:53:23 +03:00
bors[bot]
5e1d109cbb Merge #81
81: [WIP] Reject impl keyword inside impl header r=matklad a=csmoe

Closes #77 

Co-authored-by: csmoe <35686186+csmoe@users.noreply.github.com>
2018-09-26 20:14:28 +00:00
csmoe
8b710e9535 generate testsuite for impl_type 2018-09-26 16:53:16 +08:00
csmoe
edf1cc3582 parse impl type 2018-09-25 22:21:16 +08:00
Jeremy A. Kolb
4d52d004d5 Unit Tests 2018-09-24 10:48:13 -04:00
Jeremy A. Kolb
ff0a706a30 Split folding ranges into editor and lsp parts 2018-09-24 09:52:33 -04:00
csmoe
cacb32d88a reject impl keyword in impl header 2018-09-24 11:44:43 +08:00
csmoe
e446316585 add test for impl recovery 2018-09-24 11:44:43 +08:00
Jeremy A. Kolb
bd2b2f1b48 Implement folding ranges 2018-09-23 11:19:36 -04:00
Jeremy A. Kolb
e293a16d6b Support LSP 3.13 2018-09-23 11:10:57 -04:00
bors[bot]
f5808b21a4 Merge #75
75: libsyntax2 -> rust-analyzer r=matklad a=kjeremy

Change a few `libsyntax2` to `rust-analyzer`

Co-authored-by: Jeremy A. Kolb <jkolb@ara.com>
2018-09-19 10:56:31 +00:00
Aleksey Kladov
4d5cfd7229 prefer lifetimes in extend selection 2018-09-19 13:55:47 +03:00
Aleksey Kladov
d6c7030aeb Add emacs function for extend shirnk selection 2018-09-19 00:46:10 +03:00
Jeremy A. Kolb
8845b50438 libsyntax2 -> rust-analyzer 2018-09-18 17:40:33 -04:00
Aleksey Kladov
79293d2593 eprintln 2018-09-16 17:24:18 +03:00
Aleksey Kladov
b5021411a8 rename all things 2018-09-16 13:07:39 +03:00
Aleksey Kladov
ba0bfeee12 fix derecated call 2018-09-16 03:06:56 +03:00
Aleksey Kladov
5b70e5cf0c fix installation for windows 2018-09-16 00:02:25 +01:00
Aleksey Kladov
722706fe41 get rid of commandspeck 2018-09-16 02:12:53 +03:00
bors[bot]
3993bb4de9 Merge #67
67: Salsa r=matklad a=matklad

The aim of this PR is to transition from rather ad-hock FileData and ModuleMap caching strategy to something resembling a general-purpose red-green engine. 

Ideally, we shouldn't recompute ModuleMap at all, unless the set of mod decls or files changes.



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2018-09-15 21:11:25 +00:00
Aleksey Kladov
fcdf3a52b4 everysalsa 2018-09-16 00:00:05 +03:00
Aleksey Kladov
e69ff21207 kill old module_map 2018-09-16 00:00:05 +03:00
Aleksey Kladov
3ebeb0db8d move readonly source to module tree descr 2018-09-16 00:00:05 +03:00
Aleksey Kladov
58674dc3c4 ModuleTreeDescriptor 2018-09-16 00:00:05 +03:00
Aleksey Kladov
d59413c895 yet another db api 2018-09-16 00:00:05 +03:00
Aleksey Kladov
0d7b1e442d minor 2018-09-16 00:00:05 +03:00
Aleksey Kladov
47be3a3a24 renames 2018-09-16 00:00:05 +03:00
Aleksey Kladov
8c737255ff use salsa for new module map 2018-09-16 00:00:05 +03:00
Aleksey Kladov
60fdfec327 eager invalidation 2018-09-16 00:00:05 +03:00
Aleksey Kladov
cecc7ad5b2 be generic over data 2018-09-16 00:00:05 +03:00
Aleksey Kladov
8cf9c27196 generic salsa algo 2018-09-16 00:00:05 +03:00
Aleksey Kladov
0e493160c0 store params in the graph 2018-09-16 00:00:05 +03:00
Aleksey Kladov
907d44a751 any-cache 2018-09-16 00:00:05 +03:00
Aleksey Kladov
dbdf72e2e2 fix dep tracking 2018-09-16 00:00:05 +03:00
Aleksey Kladov
c81d0d51bf add deps tracking 2018-09-16 00:00:05 +03:00
Aleksey Kladov
db14b4270c Add simplisitc global modification caching 2018-09-16 00:00:05 +03:00
Aleksey Kladov
3ae3b3eb06 initial query tracing 2018-09-16 00:00:05 +03:00
Aleksey Kladov
99d02fe583 start query-based modules 2018-09-16 00:00:05 +03:00
bors[bot]
2a56b5c4f0 Merge #69
69: Incremental reparsing for single tokens  r=matklad a=darksv

Implement incremental reparsing for `WHITESPACE`, `COMMENT`, `DOC_COMMENT`, `IDENT`, `STRING` and `RAW_STRING`. This allows to avoid reparsing whole blocks when a change was made only within these tokens.

Co-authored-by: darksv <darek969-12@o2.pl>
2018-09-15 20:57:06 +00:00
darksv
ab00639032 independent tests for incremental reparsing of blocks and leaves 2018-09-15 17:05:08 +02:00
darksv
46cee0415c move reparsing tests 2018-09-15 14:35:30 +02:00
darksv
16ad5384f0 commit missing file 2018-09-15 13:42:10 +02:00
darksv
a29211918b create separated mod for reparsing functionality 2018-09-15 13:35:55 +02:00
darksv
d825cffe3b adjust trailing newline 2018-09-14 23:45:19 +02:00
darksv
ecbfe68bf4 add missing files with inline tests 2018-09-14 23:33:29 +02:00
darksv
100968b689 Support for unions 2018-09-14 22:51:12 +02:00
darksv
bc94bf95ce correctly handle IDENTs when changed to contextual keywords 2018-09-14 19:26:48 +02:00
darksv
c300135322 create leaf directly without calling the parser 2018-09-14 19:23:10 +02:00