Merge #5750
5750: Rename ra_ide -> ide
r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
commit
018a6cac07
113 changed files with 246 additions and 348 deletions
70
Cargo.lock
generated
70
Cargo.lock
generated
|
|
@ -346,7 +346,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "expect"
|
||||
version = "0.1.0"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"difference",
|
||||
"once_cell",
|
||||
|
|
@ -385,7 +385,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "flycheck"
|
||||
version = "0.1.0"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"cargo_metadata",
|
||||
"crossbeam-channel",
|
||||
|
|
@ -579,6 +579,30 @@ dependencies = [
|
|||
"winapi 0.3.9",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ide"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"assists",
|
||||
"base_db",
|
||||
"cfg",
|
||||
"either",
|
||||
"expect",
|
||||
"hir",
|
||||
"ide_db",
|
||||
"indexmap",
|
||||
"itertools",
|
||||
"log",
|
||||
"oorandom",
|
||||
"profile",
|
||||
"rustc-hash",
|
||||
"ssr",
|
||||
"stdx",
|
||||
"syntax",
|
||||
"test_utils",
|
||||
"text_edit",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ide_db"
|
||||
version = "0.0.0"
|
||||
|
|
@ -992,7 +1016,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "paths"
|
||||
version = "0.1.0"
|
||||
version = "0.0.0"
|
||||
|
||||
[[package]]
|
||||
name = "percent-encoding"
|
||||
|
|
@ -1052,7 +1076,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "proc_macro_api"
|
||||
version = "0.1.0"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"crossbeam-channel",
|
||||
"jod-thread",
|
||||
|
|
@ -1119,30 +1143,6 @@ dependencies = [
|
|||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ra_ide"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"assists",
|
||||
"base_db",
|
||||
"cfg",
|
||||
"either",
|
||||
"expect",
|
||||
"hir",
|
||||
"ide_db",
|
||||
"indexmap",
|
||||
"itertools",
|
||||
"log",
|
||||
"oorandom",
|
||||
"profile",
|
||||
"rustc-hash",
|
||||
"ssr",
|
||||
"stdx",
|
||||
"syntax",
|
||||
"test_utils",
|
||||
"text_edit",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rayon"
|
||||
version = "1.3.1"
|
||||
|
|
@ -1213,7 +1213,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "rust-analyzer"
|
||||
version = "0.1.0"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"base_db",
|
||||
|
|
@ -1225,6 +1225,7 @@ dependencies = [
|
|||
"hir",
|
||||
"hir_def",
|
||||
"hir_ty",
|
||||
"ide",
|
||||
"ide_db",
|
||||
"itertools",
|
||||
"jod-thread",
|
||||
|
|
@ -1239,7 +1240,6 @@ dependencies = [
|
|||
"proc_macro_srv",
|
||||
"profile",
|
||||
"project_model",
|
||||
"ra_ide",
|
||||
"rayon",
|
||||
"rustc-hash",
|
||||
"serde",
|
||||
|
|
@ -1444,7 +1444,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "ssr"
|
||||
version = "0.1.0"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"base_db",
|
||||
"expect",
|
||||
|
|
@ -1458,7 +1458,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "stdx"
|
||||
version = "0.1.0"
|
||||
version = "0.0.0"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
|
|
@ -1515,7 +1515,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "test_utils"
|
||||
version = "0.1.0"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"difference",
|
||||
"rustc-hash",
|
||||
|
|
@ -1729,7 +1729,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "vfs"
|
||||
version = "0.1.0"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"fst",
|
||||
"paths",
|
||||
|
|
@ -1738,7 +1738,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "vfs-notify"
|
||||
version = "0.1.0"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"crossbeam-channel",
|
||||
"jod-thread",
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Frls-2.2E0
|
|||
|
||||
* Website: https://rust-analyzer.github.io/
|
||||
* Metrics: https://rust-analyzer.github.io/metrics/
|
||||
* API docs: https://rust-analyzer.github.io/rust-analyzer/ra_ide/
|
||||
* API docs: https://rust-analyzer.github.io/rust-analyzer/ide/
|
||||
|
||||
## License
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
//! base_db defines basic database traits. The concrete DB is defined by ra_ide.
|
||||
//! base_db defines basic database traits. The concrete DB is defined by ide.
|
||||
mod cancellation;
|
||||
mod input;
|
||||
pub mod fixture;
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
[package]
|
||||
name = "expect"
|
||||
version = "0.1.0"
|
||||
version = "0.0.0"
|
||||
license = "MIT OR Apache-2.0"
|
||||
authors = ["rust-analyzer developers"]
|
||||
edition = "2018"
|
||||
license = "MIT OR Apache-2.0"
|
||||
|
||||
[lib]
|
||||
doctest = false
|
||||
|
|
@ -11,4 +11,5 @@ doctest = false
|
|||
[dependencies]
|
||||
once_cell = "1"
|
||||
difference = "2"
|
||||
|
||||
stdx = { path = "../stdx" }
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
[package]
|
||||
edition = "2018"
|
||||
name = "flycheck"
|
||||
version = "0.1.0"
|
||||
authors = ["rust-analyzer developers"]
|
||||
version = "0.0.0"
|
||||
license = "MIT OR Apache-2.0"
|
||||
authors = ["rust-analyzer developers"]
|
||||
edition = "2018"
|
||||
|
||||
[lib]
|
||||
doctest = false
|
||||
|
|
@ -14,4 +14,5 @@ log = "0.4.8"
|
|||
cargo_metadata = "0.11.1"
|
||||
serde_json = "1.0.48"
|
||||
jod-thread = "0.1.1"
|
||||
|
||||
toolchain = { path = "../toolchain" }
|
||||
|
|
|
|||
|
|
@ -1,16 +1,13 @@
|
|||
[package]
|
||||
edition = "2018"
|
||||
name = "ra_ide"
|
||||
version = "0.1.0"
|
||||
authors = ["rust-analyzer developers"]
|
||||
name = "ide"
|
||||
version = "0.0.0"
|
||||
license = "MIT OR Apache-2.0"
|
||||
authors = ["rust-analyzer developers"]
|
||||
edition = "2018"
|
||||
|
||||
[lib]
|
||||
doctest = false
|
||||
|
||||
[features]
|
||||
wasm = []
|
||||
|
||||
[dependencies]
|
||||
either = "1.5.3"
|
||||
indexmap = "1.3.2"
|
||||
|
|
@ -20,7 +17,6 @@ rustc-hash = "1.1.0"
|
|||
oorandom = "11.1.2"
|
||||
|
||||
stdx = { path = "../stdx" }
|
||||
|
||||
syntax = { path = "../syntax" }
|
||||
text_edit = { path = "../text_edit" }
|
||||
base_db = { path = "../base_db" }
|
||||
|
|
@ -31,7 +27,7 @@ test_utils = { path = "../test_utils" }
|
|||
assists = { path = "../assists" }
|
||||
ssr = { path = "../ssr" }
|
||||
|
||||
# ra_ide should depend only on the top-level `hir` package. if you need
|
||||
# ide should depend only on the top-level `hir` package. if you need
|
||||
# something from some `hir_xxx` subpackage, reexport the API via `hir`.
|
||||
hir = { path = "../hir" }
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
//! ra_ide crate provides "ide-centric" APIs for the rust-analyzer. That is,
|
||||
//! ide crate provides "ide-centric" APIs for the rust-analyzer. That is,
|
||||
//! it generally operates with files and text ranges, and returns results as
|
||||
//! Strings, suitable for displaying to the human.
|
||||
//!
|
||||
|
|
@ -105,7 +105,7 @@ impl<T> Option<T> {
|
|||
}
|
||||
"#
|
||||
.trim(),
|
||||
expect_file!["crates/ra_ide/test_data/highlighting.html"],
|
||||
expect_file!["crates/ide/test_data/highlighting.html"],
|
||||
false,
|
||||
);
|
||||
}
|
||||
|
|
@ -128,7 +128,7 @@ fn bar() {
|
|||
}
|
||||
"#
|
||||
.trim(),
|
||||
expect_file!["crates/ra_ide/test_data/rainbow_highlighting.html"],
|
||||
expect_file!["crates/ide/test_data/rainbow_highlighting.html"],
|
||||
true,
|
||||
);
|
||||
}
|
||||
|
|
@ -181,7 +181,7 @@ fn main() {
|
|||
);
|
||||
}"##
|
||||
.trim(),
|
||||
expect_file!["crates/ra_ide/test_data/highlight_injection.html"],
|
||||
expect_file!["crates/ide/test_data/highlight_injection.html"],
|
||||
false,
|
||||
);
|
||||
}
|
||||
|
|
@ -264,7 +264,7 @@ fn main() {
|
|||
println!("{ничоси}", ничоси = 92);
|
||||
}"#
|
||||
.trim(),
|
||||
expect_file!["crates/ra_ide/test_data/highlight_strings.html"],
|
||||
expect_file!["crates/ide/test_data/highlight_strings.html"],
|
||||
false,
|
||||
);
|
||||
}
|
||||
|
|
@ -337,7 +337,7 @@ fn main() {
|
|||
}
|
||||
"#
|
||||
.trim(),
|
||||
expect_file!["crates/ra_ide/test_data/highlight_unsafe.html"],
|
||||
expect_file!["crates/ide/test_data/highlight_unsafe.html"],
|
||||
false,
|
||||
);
|
||||
}
|
||||
|
|
@ -413,7 +413,7 @@ macro_rules! noop {
|
|||
}
|
||||
"#
|
||||
.trim(),
|
||||
expect_file!["crates/ra_ide/test_data/highlight_doctest.html"],
|
||||
expect_file!["crates/ide/test_data/highlight_doctest.html"],
|
||||
false,
|
||||
);
|
||||
}
|
||||
|
|
@ -430,7 +430,7 @@ fn test_extern_crate() {
|
|||
//- /alloc/lib.rs
|
||||
pub struct A
|
||||
"#,
|
||||
expect_file!["crates/ra_ide/test_data/highlight_extern_crate.html"],
|
||||
expect_file!["crates/ide/test_data/highlight_extern_crate.html"],
|
||||
false,
|
||||
);
|
||||
}
|
||||
|
|
@ -25,6 +25,6 @@ text_edit = { path = "../text_edit" }
|
|||
base_db = { path = "../base_db" }
|
||||
profile = { path = "../profile" }
|
||||
test_utils = { path = "../test_utils" }
|
||||
# ra_ide should depend only on the top-level `hir` package. if you need
|
||||
# ide should depend only on the top-level `hir` package. if you need
|
||||
# something from some `hir_xxx` subpackage, reexport the API via `hir`.
|
||||
hir = { path = "../hir" }
|
||||
|
|
|
|||
|
|
@ -243,7 +243,7 @@ impl NameRefClass {
|
|||
}
|
||||
|
||||
// Note: we don't have unit-tests for this rather important function.
|
||||
// It is primarily exercised via goto definition tests in `ra_ide`.
|
||||
// It is primarily exercised via goto definition tests in `ide`.
|
||||
pub fn classify_name_ref(
|
||||
sema: &Semantics<RootDatabase>,
|
||||
name_ref: &ast::NameRef,
|
||||
|
|
|
|||
|
|
@ -142,19 +142,19 @@ pub(crate) fn reparser(
|
|||
) -> Option<fn(&mut Parser)> {
|
||||
let res = match node {
|
||||
BLOCK_EXPR => expressions::block_expr,
|
||||
RECORD_FIELD_LIST => items::record_field_def_list,
|
||||
RECORD_EXPR_FIELD_LIST => items::record_field_list,
|
||||
VARIANT_LIST => items::enum_variant_list,
|
||||
RECORD_FIELD_LIST => items::record_field_list,
|
||||
RECORD_EXPR_FIELD_LIST => items::record_expr_field_list,
|
||||
VARIANT_LIST => items::variant_list,
|
||||
MATCH_ARM_LIST => items::match_arm_list,
|
||||
USE_TREE_LIST => items::use_tree_list,
|
||||
EXTERN_ITEM_LIST => items::extern_item_list,
|
||||
TOKEN_TREE if first_child? == T!['{'] => items::token_tree,
|
||||
ASSOC_ITEM_LIST => match parent? {
|
||||
IMPL => items::impl_item_list,
|
||||
TRAIT => items::trait_item_list,
|
||||
IMPL => items::assoc_item_list,
|
||||
TRAIT => items::assoc_item_list,
|
||||
_ => return None,
|
||||
},
|
||||
ITEM_LIST => items::mod_item_list,
|
||||
ITEM_LIST => items::item_list,
|
||||
_ => return None,
|
||||
};
|
||||
Some(res)
|
||||
|
|
@ -217,7 +217,7 @@ fn opt_visibility(p: &mut Parser) -> bool {
|
|||
true
|
||||
}
|
||||
|
||||
fn opt_alias(p: &mut Parser) {
|
||||
fn opt_rename(p: &mut Parser) {
|
||||
if p.at(T![as]) {
|
||||
let m = p.start();
|
||||
p.bump(T![as]);
|
||||
|
|
@ -239,7 +239,7 @@ fn abi(p: &mut Parser) {
|
|||
abi.complete(p, ABI);
|
||||
}
|
||||
|
||||
fn opt_fn_ret_type(p: &mut Parser) -> bool {
|
||||
fn opt_ret_type(p: &mut Parser) -> bool {
|
||||
if p.at(T![->]) {
|
||||
let m = p.start();
|
||||
p.bump(T![->]);
|
||||
|
|
|
|||
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
use super::*;
|
||||
|
||||
pub(super) fn inner_attributes(p: &mut Parser) {
|
||||
pub(super) fn inner_attrs(p: &mut Parser) {
|
||||
while p.at(T![#]) && p.nth(1) == T![!] {
|
||||
attribute(p, true)
|
||||
attr(p, true)
|
||||
}
|
||||
}
|
||||
|
||||
pub(super) fn outer_attributes(p: &mut Parser) {
|
||||
pub(super) fn outer_attrs(p: &mut Parser) {
|
||||
while p.at(T![#]) {
|
||||
attribute(p, false)
|
||||
attr(p, false)
|
||||
}
|
||||
}
|
||||
|
||||
fn attribute(p: &mut Parser, inner: bool) {
|
||||
fn attr(p: &mut Parser, inner: bool) {
|
||||
let attr = p.start();
|
||||
assert!(p.at(T![#]));
|
||||
p.bump(T![#]);
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ pub(super) fn expr(p: &mut Parser) -> (Option<CompletedMarker>, BlockLike) {
|
|||
pub(super) fn expr_with_attrs(p: &mut Parser) -> bool {
|
||||
let m = p.start();
|
||||
let has_attrs = p.at(T![#]);
|
||||
attributes::outer_attributes(p);
|
||||
attributes::outer_attrs(p);
|
||||
|
||||
let (cm, _block_like) = expr(p);
|
||||
let success = cm.is_some();
|
||||
|
|
@ -64,7 +64,7 @@ pub(super) fn stmt(p: &mut Parser, with_semi: StmtWithSemi) {
|
|||
// #[D] return ();
|
||||
// }
|
||||
let has_attrs = p.at(T![#]);
|
||||
attributes::outer_attributes(p);
|
||||
attributes::outer_attrs(p);
|
||||
|
||||
if p.at(T![let]) {
|
||||
let_stmt(p, m, with_semi);
|
||||
|
|
@ -175,7 +175,7 @@ pub(super) fn stmt(p: &mut Parser, with_semi: StmtWithSemi) {
|
|||
|
||||
pub(super) fn expr_block_contents(p: &mut Parser) {
|
||||
// This is checked by a validator
|
||||
attributes::inner_attributes(p);
|
||||
attributes::inner_attrs(p);
|
||||
|
||||
while !p.at(EOF) && !p.at(T!['}']) {
|
||||
// test nocontentexpr
|
||||
|
|
@ -489,7 +489,7 @@ fn method_call_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker {
|
|||
let m = lhs.precede(p);
|
||||
p.bump_any();
|
||||
name_ref(p);
|
||||
type_args::opt_type_arg_list(p, true);
|
||||
type_args::opt_generic_arg_list(p, true);
|
||||
if p.at(T!['(']) {
|
||||
arg_list(p);
|
||||
}
|
||||
|
|
@ -585,7 +585,7 @@ fn path_expr(p: &mut Parser, r: Restrictions) -> (CompletedMarker, BlockLike) {
|
|||
paths::expr_path(p);
|
||||
match p.current() {
|
||||
T!['{'] if !r.forbid_structs => {
|
||||
record_field_list(p);
|
||||
record_expr_field_list(p);
|
||||
(m.complete(p, RECORD_EXPR), BlockLike::NotBlock)
|
||||
}
|
||||
T![!] if !p.at(T![!=]) => {
|
||||
|
|
@ -603,7 +603,7 @@ fn path_expr(p: &mut Parser, r: Restrictions) -> (CompletedMarker, BlockLike) {
|
|||
// S { x, y: 32, ..Default::default() };
|
||||
// TupleStruct { 0: 1 };
|
||||
// }
|
||||
pub(crate) fn record_field_list(p: &mut Parser) {
|
||||
pub(crate) fn record_expr_field_list(p: &mut Parser) {
|
||||
assert!(p.at(T!['{']));
|
||||
let m = p.start();
|
||||
p.bump(T!['{']);
|
||||
|
|
@ -613,7 +613,7 @@ pub(crate) fn record_field_list(p: &mut Parser) {
|
|||
// fn main() {
|
||||
// S { #[cfg(test)] field: 1 }
|
||||
// }
|
||||
attributes::outer_attributes(p);
|
||||
attributes::outer_attrs(p);
|
||||
|
||||
match p.current() {
|
||||
IDENT | INT_NUMBER => {
|
||||
|
|
|
|||
|
|
@ -75,9 +75,9 @@ pub(super) fn atom_expr(p: &mut Parser, r: Restrictions) -> Option<(CompletedMar
|
|||
T!['('] => tuple_expr(p),
|
||||
T!['['] => array_expr(p),
|
||||
L_DOLLAR => meta_var_expr(p),
|
||||
T![|] => lambda_expr(p),
|
||||
T![move] if la == T![|] => lambda_expr(p),
|
||||
T![async] if la == T![|] || (la == T![move] && p.nth(2) == T![|]) => lambda_expr(p),
|
||||
T![|] => closure_expr(p),
|
||||
T![move] if la == T![|] => closure_expr(p),
|
||||
T![async] if la == T![|] || (la == T![move] && p.nth(2) == T![|]) => closure_expr(p),
|
||||
T![if] => if_expr(p),
|
||||
|
||||
T![loop] => loop_expr(p, None),
|
||||
|
|
@ -228,7 +228,7 @@ fn array_expr(p: &mut Parser) -> CompletedMarker {
|
|||
// move || {};
|
||||
// async move || {};
|
||||
// }
|
||||
fn lambda_expr(p: &mut Parser) -> CompletedMarker {
|
||||
fn closure_expr(p: &mut Parser) -> CompletedMarker {
|
||||
assert!(
|
||||
p.at(T![|])
|
||||
|| (p.at(T![move]) && p.nth(1) == T![|])
|
||||
|
|
@ -239,7 +239,7 @@ fn lambda_expr(p: &mut Parser) -> CompletedMarker {
|
|||
p.eat(T![async]);
|
||||
p.eat(T![move]);
|
||||
params::param_list_closure(p);
|
||||
if opt_fn_ret_type(p) {
|
||||
if opt_ret_type(p) {
|
||||
// test lambda_ret_block
|
||||
// fn main() { || -> i32 { 92 }(); }
|
||||
block_expr(p);
|
||||
|
|
@ -265,7 +265,7 @@ fn if_expr(p: &mut Parser) -> CompletedMarker {
|
|||
assert!(p.at(T![if]));
|
||||
let m = p.start();
|
||||
p.bump(T![if]);
|
||||
cond(p);
|
||||
condition(p);
|
||||
block_expr(p);
|
||||
if p.at(T![else]) {
|
||||
p.bump(T![else]);
|
||||
|
|
@ -314,7 +314,7 @@ fn while_expr(p: &mut Parser, m: Option<Marker>) -> CompletedMarker {
|
|||
assert!(p.at(T![while]));
|
||||
let m = m.unwrap_or_else(|| p.start());
|
||||
p.bump(T![while]);
|
||||
cond(p);
|
||||
condition(p);
|
||||
block_expr(p);
|
||||
m.complete(p, WHILE_EXPR)
|
||||
}
|
||||
|
|
@ -342,7 +342,7 @@ fn for_expr(p: &mut Parser, m: Option<Marker>) -> CompletedMarker {
|
|||
// while let Some(_) | Some(_) = None {}
|
||||
// while let | Some(_) = None {}
|
||||
// }
|
||||
fn cond(p: &mut Parser) {
|
||||
fn condition(p: &mut Parser) {
|
||||
let m = p.start();
|
||||
if p.eat(T![let]) {
|
||||
patterns::pattern_top(p);
|
||||
|
|
@ -386,7 +386,7 @@ pub(crate) fn match_arm_list(p: &mut Parser) {
|
|||
// _ => (),
|
||||
// }
|
||||
// }
|
||||
attributes::inner_attributes(p);
|
||||
attributes::inner_attrs(p);
|
||||
|
||||
while !p.at(EOF) && !p.at(T!['}']) {
|
||||
if p.at(T!['{']) {
|
||||
|
|
@ -437,7 +437,7 @@ fn match_arm(p: &mut Parser) -> BlockLike {
|
|||
// _ => (),
|
||||
// }
|
||||
// }
|
||||
attributes::outer_attributes(p);
|
||||
attributes::outer_attrs(p);
|
||||
|
||||
patterns::pattern_top_r(p, TokenSet::EMPTY);
|
||||
if p.at(T![if]) {
|
||||
|
|
|
|||
|
|
@ -6,9 +6,9 @@ mod traits;
|
|||
mod use_item;
|
||||
|
||||
pub(crate) use self::{
|
||||
adt::{enum_variant_list, record_field_def_list},
|
||||
expressions::{match_arm_list, record_field_list},
|
||||
traits::{impl_item_list, trait_item_list},
|
||||
adt::{record_field_list, variant_list},
|
||||
expressions::{match_arm_list, record_expr_field_list},
|
||||
traits::assoc_item_list,
|
||||
use_item::use_tree_list,
|
||||
};
|
||||
use super::*;
|
||||
|
|
@ -20,7 +20,7 @@ use super::*;
|
|||
// super::baz! {}
|
||||
// struct S;
|
||||
pub(super) fn mod_contents(p: &mut Parser, stop_on_r_curly: bool) {
|
||||
attributes::inner_attributes(p);
|
||||
attributes::inner_attrs(p);
|
||||
while !(stop_on_r_curly && p.at(T!['}']) || p.at(EOF)) {
|
||||
item_or_macro(p, stop_on_r_curly)
|
||||
}
|
||||
|
|
@ -33,7 +33,7 @@ pub(super) const ITEM_RECOVERY_SET: TokenSet = token_set![
|
|||
|
||||
pub(super) fn item_or_macro(p: &mut Parser, stop_on_r_curly: bool) {
|
||||
let m = p.start();
|
||||
attributes::outer_attributes(p);
|
||||
attributes::outer_attrs(p);
|
||||
let m = match maybe_item(p, m) {
|
||||
Ok(()) => {
|
||||
if p.at(T![;]) {
|
||||
|
|
@ -144,30 +144,30 @@ pub(super) fn maybe_item(p: &mut Parser, m: Marker) -> Result<(), Marker> {
|
|||
// test fn
|
||||
// fn foo() {}
|
||||
T![fn] => {
|
||||
fn_def(p);
|
||||
fn_(p);
|
||||
m.complete(p, FN);
|
||||
}
|
||||
|
||||
// test trait
|
||||
// trait T {}
|
||||
T![trait] => {
|
||||
traits::trait_def(p);
|
||||
traits::trait_(p);
|
||||
m.complete(p, TRAIT);
|
||||
}
|
||||
|
||||
T![const] => {
|
||||
consts::const_def(p, m);
|
||||
consts::konst(p, m);
|
||||
}
|
||||
|
||||
// test impl
|
||||
// impl T for S {}
|
||||
T![impl] => {
|
||||
traits::impl_def(p);
|
||||
traits::impl_(p);
|
||||
m.complete(p, IMPL);
|
||||
}
|
||||
|
||||
T![type] => {
|
||||
type_def(p, m);
|
||||
type_alias(p, m);
|
||||
}
|
||||
_ => {
|
||||
if !has_visibility && !has_mods {
|
||||
|
|
@ -190,9 +190,9 @@ fn items_without_modifiers(p: &mut Parser, m: Marker) -> Result<(), Marker> {
|
|||
match p.current() {
|
||||
// test extern_crate
|
||||
// extern crate foo;
|
||||
T![extern] if la == T![crate] => extern_crate_item(p, m),
|
||||
T![extern] if la == T![crate] => extern_crate(p, m),
|
||||
T![type] => {
|
||||
type_def(p, m);
|
||||
type_alias(p, m);
|
||||
}
|
||||
T![mod] => mod_item(p, m),
|
||||
T![struct] => {
|
||||
|
|
@ -205,7 +205,7 @@ fn items_without_modifiers(p: &mut Parser, m: Marker) -> Result<(), Marker> {
|
|||
// a: i32,
|
||||
// b: f32,
|
||||
// }
|
||||
adt::struct_def(p, m);
|
||||
adt::strukt(p, m);
|
||||
}
|
||||
// test pub_macro_def
|
||||
// pub macro m($:ident) {}
|
||||
|
|
@ -219,12 +219,12 @@ fn items_without_modifiers(p: &mut Parser, m: Marker) -> Result<(), Marker> {
|
|||
// a: i32,
|
||||
// b: f32,
|
||||
// }
|
||||
adt::union_def(p, m);
|
||||
adt::union(p, m);
|
||||
}
|
||||
T![enum] => adt::enum_def(p, m),
|
||||
T![use] => use_item::use_item(p, m),
|
||||
T![const] if (la == IDENT || la == T![_] || la == T![mut]) => consts::const_def(p, m),
|
||||
T![static] => consts::static_def(p, m),
|
||||
T![enum] => adt::enum_(p, m),
|
||||
T![use] => use_item::use_(p, m),
|
||||
T![const] if (la == IDENT || la == T![_] || la == T![mut]) => consts::konst(p, m),
|
||||
T![static] => consts::static_(p, m),
|
||||
// test extern_block
|
||||
// extern {}
|
||||
T![extern]
|
||||
|
|
@ -239,7 +239,7 @@ fn items_without_modifiers(p: &mut Parser, m: Marker) -> Result<(), Marker> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn extern_crate_item(p: &mut Parser, m: Marker) {
|
||||
fn extern_crate(p: &mut Parser, m: Marker) {
|
||||
assert!(p.at(T![extern]));
|
||||
p.bump(T![extern]);
|
||||
assert!(p.at(T![crate]));
|
||||
|
|
@ -251,7 +251,7 @@ fn extern_crate_item(p: &mut Parser, m: Marker) {
|
|||
name_ref(p);
|
||||
}
|
||||
|
||||
opt_alias(p);
|
||||
opt_rename(p);
|
||||
p.expect(T![;]);
|
||||
m.complete(p, EXTERN_CRATE);
|
||||
}
|
||||
|
|
@ -265,14 +265,14 @@ pub(crate) fn extern_item_list(p: &mut Parser) {
|
|||
m.complete(p, EXTERN_ITEM_LIST);
|
||||
}
|
||||
|
||||
fn fn_def(p: &mut Parser) {
|
||||
fn fn_(p: &mut Parser) {
|
||||
assert!(p.at(T![fn]));
|
||||
p.bump(T![fn]);
|
||||
|
||||
name_r(p, ITEM_RECOVERY_SET);
|
||||
// test function_type_params
|
||||
// fn foo<T: Clone + Copy>(){}
|
||||
type_params::opt_type_param_list(p);
|
||||
type_params::opt_generic_param_list(p);
|
||||
|
||||
if p.at(T!['(']) {
|
||||
params::param_list_fn_def(p);
|
||||
|
|
@ -282,7 +282,7 @@ fn fn_def(p: &mut Parser) {
|
|||
// test function_ret_type
|
||||
// fn foo() {}
|
||||
// fn bar() -> () {}
|
||||
opt_fn_ret_type(p);
|
||||
opt_ret_type(p);
|
||||
|
||||
// test function_where_clause
|
||||
// fn foo<T>() where T: Copy {}
|
||||
|
|
@ -299,7 +299,7 @@ fn fn_def(p: &mut Parser) {
|
|||
|
||||
// test type_item
|
||||
// type Foo = Bar;
|
||||
fn type_def(p: &mut Parser, m: Marker) {
|
||||
fn type_alias(p: &mut Parser, m: Marker) {
|
||||
assert!(p.at(T![type]));
|
||||
p.bump(T![type]);
|
||||
|
||||
|
|
@ -307,7 +307,7 @@ fn type_def(p: &mut Parser, m: Marker) {
|
|||
|
||||
// test type_item_type_params
|
||||
// type Result<T> = ();
|
||||
type_params::opt_type_param_list(p);
|
||||
type_params::opt_generic_param_list(p);
|
||||
|
||||
if p.at(T![:]) {
|
||||
type_params::bounds(p);
|
||||
|
|
@ -329,14 +329,14 @@ pub(crate) fn mod_item(p: &mut Parser, m: Marker) {
|
|||
|
||||
name(p);
|
||||
if p.at(T!['{']) {
|
||||
mod_item_list(p);
|
||||
item_list(p);
|
||||
} else if !p.eat(T![;]) {
|
||||
p.error("expected `;` or `{`");
|
||||
}
|
||||
m.complete(p, MODULE);
|
||||
}
|
||||
|
||||
pub(crate) fn mod_item_list(p: &mut Parser) {
|
||||
pub(crate) fn item_list(p: &mut Parser) {
|
||||
assert!(p.at(T!['{']));
|
||||
let m = p.start();
|
||||
p.bump(T!['{']);
|
||||
|
|
|
|||
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
use super::*;
|
||||
|
||||
pub(super) fn struct_def(p: &mut Parser, m: Marker) {
|
||||
pub(super) fn strukt(p: &mut Parser, m: Marker) {
|
||||
assert!(p.at(T![struct]));
|
||||
p.bump(T![struct]);
|
||||
struct_or_union(p, m, T![struct], STRUCT);
|
||||
}
|
||||
|
||||
pub(super) fn union_def(p: &mut Parser, m: Marker) {
|
||||
pub(super) fn union(p: &mut Parser, m: Marker) {
|
||||
assert!(p.at_contextual_kw("union"));
|
||||
p.bump_remap(T![union]);
|
||||
struct_or_union(p, m, T![union], UNION);
|
||||
|
|
@ -16,7 +16,7 @@ pub(super) fn union_def(p: &mut Parser, m: Marker) {
|
|||
|
||||
fn struct_or_union(p: &mut Parser, m: Marker, kw: SyntaxKind, def: SyntaxKind) {
|
||||
name_r(p, ITEM_RECOVERY_SET);
|
||||
type_params::opt_type_param_list(p);
|
||||
type_params::opt_generic_param_list(p);
|
||||
match p.current() {
|
||||
T![where] => {
|
||||
type_params::opt_where_clause(p);
|
||||
|
|
@ -24,7 +24,7 @@ fn struct_or_union(p: &mut Parser, m: Marker, kw: SyntaxKind, def: SyntaxKind) {
|
|||
T![;] => {
|
||||
p.bump(T![;]);
|
||||
}
|
||||
T!['{'] => record_field_def_list(p),
|
||||
T!['{'] => record_field_list(p),
|
||||
_ => {
|
||||
//FIXME: special case `(` error message
|
||||
p.error("expected `;` or `{`");
|
||||
|
|
@ -34,9 +34,9 @@ fn struct_or_union(p: &mut Parser, m: Marker, kw: SyntaxKind, def: SyntaxKind) {
|
|||
T![;] if kw == T![struct] => {
|
||||
p.bump(T![;]);
|
||||
}
|
||||
T!['{'] => record_field_def_list(p),
|
||||
T!['{'] => record_field_list(p),
|
||||
T!['('] if kw == T![struct] => {
|
||||
tuple_field_def_list(p);
|
||||
tuple_field_list(p);
|
||||
// test tuple_struct_where
|
||||
// struct Test<T>(T) where T: Clone;
|
||||
// struct Test<T>(T);
|
||||
|
|
@ -53,21 +53,21 @@ fn struct_or_union(p: &mut Parser, m: Marker, kw: SyntaxKind, def: SyntaxKind) {
|
|||
m.complete(p, def);
|
||||
}
|
||||
|
||||
pub(super) fn enum_def(p: &mut Parser, m: Marker) {
|
||||
pub(super) fn enum_(p: &mut Parser, m: Marker) {
|
||||
assert!(p.at(T![enum]));
|
||||
p.bump(T![enum]);
|
||||
name_r(p, ITEM_RECOVERY_SET);
|
||||
type_params::opt_type_param_list(p);
|
||||
type_params::opt_generic_param_list(p);
|
||||
type_params::opt_where_clause(p);
|
||||
if p.at(T!['{']) {
|
||||
enum_variant_list(p);
|
||||
variant_list(p);
|
||||
} else {
|
||||
p.error("expected `{`")
|
||||
}
|
||||
m.complete(p, ENUM);
|
||||
}
|
||||
|
||||
pub(crate) fn enum_variant_list(p: &mut Parser) {
|
||||
pub(crate) fn variant_list(p: &mut Parser) {
|
||||
assert!(p.at(T!['{']));
|
||||
let m = p.start();
|
||||
p.bump(T!['{']);
|
||||
|
|
@ -77,12 +77,12 @@ pub(crate) fn enum_variant_list(p: &mut Parser) {
|
|||
continue;
|
||||
}
|
||||
let var = p.start();
|
||||
attributes::outer_attributes(p);
|
||||
attributes::outer_attrs(p);
|
||||
if p.at(IDENT) {
|
||||
name(p);
|
||||
match p.current() {
|
||||
T!['{'] => record_field_def_list(p),
|
||||
T!['('] => tuple_field_def_list(p),
|
||||
T!['{'] => record_field_list(p),
|
||||
T!['('] => tuple_field_list(p),
|
||||
_ => (),
|
||||
}
|
||||
|
||||
|
|
@ -104,7 +104,7 @@ pub(crate) fn enum_variant_list(p: &mut Parser) {
|
|||
m.complete(p, VARIANT_LIST);
|
||||
}
|
||||
|
||||
pub(crate) fn record_field_def_list(p: &mut Parser) {
|
||||
pub(crate) fn record_field_list(p: &mut Parser) {
|
||||
assert!(p.at(T!['{']));
|
||||
let m = p.start();
|
||||
p.bump(T!['{']);
|
||||
|
|
@ -128,7 +128,7 @@ pub(crate) fn record_field_def_list(p: &mut Parser) {
|
|||
// #[serde(with = "url_serde")]
|
||||
// pub uri: Uri,
|
||||
// }
|
||||
attributes::outer_attributes(p);
|
||||
attributes::outer_attrs(p);
|
||||
opt_visibility(p);
|
||||
if p.at(IDENT) {
|
||||
name(p);
|
||||
|
|
@ -142,7 +142,7 @@ pub(crate) fn record_field_def_list(p: &mut Parser) {
|
|||
}
|
||||
}
|
||||
|
||||
fn tuple_field_def_list(p: &mut Parser) {
|
||||
fn tuple_field_list(p: &mut Parser) {
|
||||
assert!(p.at(T!['(']));
|
||||
let m = p.start();
|
||||
if !p.expect(T!['(']) {
|
||||
|
|
@ -159,7 +159,7 @@ fn tuple_field_def_list(p: &mut Parser) {
|
|||
// enum S {
|
||||
// Uri(#[serde(with = "url_serde")] Uri),
|
||||
// }
|
||||
attributes::outer_attributes(p);
|
||||
attributes::outer_attrs(p);
|
||||
opt_visibility(p);
|
||||
if !p.at_ts(types::TYPE_FIRST) {
|
||||
p.error("expected a type");
|
||||
|
|
|
|||
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
use super::*;
|
||||
|
||||
pub(super) fn static_def(p: &mut Parser, m: Marker) {
|
||||
pub(super) fn static_(p: &mut Parser, m: Marker) {
|
||||
const_or_static(p, m, T![static], STATIC)
|
||||
}
|
||||
|
||||
pub(super) fn const_def(p: &mut Parser, m: Marker) {
|
||||
pub(super) fn konst(p: &mut Parser, m: Marker) {
|
||||
const_or_static(p, m, T![const], CONST)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@ use super::*;
|
|||
// test trait_item
|
||||
// trait T<U>: Hash + Clone where U: Copy {}
|
||||
// trait X<U: Debug + Display>: Hash + Clone where U: Copy {}
|
||||
pub(super) fn trait_def(p: &mut Parser) {
|
||||
pub(super) fn trait_(p: &mut Parser) {
|
||||
assert!(p.at(T![trait]));
|
||||
p.bump(T![trait]);
|
||||
name_r(p, ITEM_RECOVERY_SET);
|
||||
type_params::opt_type_param_list(p);
|
||||
type_params::opt_generic_param_list(p);
|
||||
// test trait_alias
|
||||
// trait Z<U> = T<U>;
|
||||
// trait Z<U> = T<U> where U: Copy;
|
||||
|
|
@ -25,41 +25,19 @@ pub(super) fn trait_def(p: &mut Parser) {
|
|||
}
|
||||
type_params::opt_where_clause(p);
|
||||
if p.at(T!['{']) {
|
||||
trait_item_list(p);
|
||||
assoc_item_list(p);
|
||||
} else {
|
||||
p.error("expected `{`");
|
||||
}
|
||||
}
|
||||
|
||||
// test trait_item_list
|
||||
// impl F {
|
||||
// type A: Clone;
|
||||
// const B: i32;
|
||||
// fn foo() {}
|
||||
// fn bar(&self);
|
||||
// }
|
||||
pub(crate) fn trait_item_list(p: &mut Parser) {
|
||||
assert!(p.at(T!['{']));
|
||||
let m = p.start();
|
||||
p.bump(T!['{']);
|
||||
while !p.at(EOF) && !p.at(T!['}']) {
|
||||
if p.at(T!['{']) {
|
||||
error_block(p, "expected an item");
|
||||
continue;
|
||||
}
|
||||
item_or_macro(p, true);
|
||||
}
|
||||
p.expect(T!['}']);
|
||||
m.complete(p, ASSOC_ITEM_LIST);
|
||||
}
|
||||
|
||||
// test impl_def
|
||||
// impl Foo {}
|
||||
pub(super) fn impl_def(p: &mut Parser) {
|
||||
pub(super) fn impl_(p: &mut Parser) {
|
||||
assert!(p.at(T![impl]));
|
||||
p.bump(T![impl]);
|
||||
if choose_type_params_over_qpath(p) {
|
||||
type_params::opt_type_param_list(p);
|
||||
type_params::opt_generic_param_list(p);
|
||||
}
|
||||
|
||||
// FIXME: never type
|
||||
|
|
@ -74,7 +52,7 @@ pub(super) fn impl_def(p: &mut Parser) {
|
|||
}
|
||||
type_params::opt_where_clause(p);
|
||||
if p.at(T!['{']) {
|
||||
impl_item_list(p);
|
||||
assoc_item_list(p);
|
||||
} else {
|
||||
p.error("expected `{`");
|
||||
}
|
||||
|
|
@ -87,7 +65,7 @@ pub(super) fn impl_def(p: &mut Parser) {
|
|||
// fn foo() {}
|
||||
// fn bar(&self) {}
|
||||
// }
|
||||
pub(crate) fn impl_item_list(p: &mut Parser) {
|
||||
pub(crate) fn assoc_item_list(p: &mut Parser) {
|
||||
assert!(p.at(T!['{']));
|
||||
let m = p.start();
|
||||
p.bump(T!['{']);
|
||||
|
|
@ -97,7 +75,7 @@ pub(crate) fn impl_item_list(p: &mut Parser) {
|
|||
// //! This is a doc comment
|
||||
// #![doc("This is also a doc comment")]
|
||||
// }
|
||||
attributes::inner_attributes(p);
|
||||
attributes::inner_attrs(p);
|
||||
|
||||
while !p.at(EOF) && !p.at(T!['}']) {
|
||||
if p.at(T!['{']) {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use super::*;
|
||||
|
||||
pub(super) fn use_item(p: &mut Parser, m: Marker) {
|
||||
pub(super) fn use_(p: &mut Parser, m: Marker) {
|
||||
assert!(p.at(T![use]));
|
||||
p.bump(T![use]);
|
||||
use_tree(p, true);
|
||||
|
|
@ -80,7 +80,7 @@ fn use_tree(p: &mut Parser, top_level: bool) {
|
|||
// running::out::of::synonyms::for_::different::*
|
||||
// };
|
||||
// use Trait as _;
|
||||
opt_alias(p);
|
||||
opt_rename(p);
|
||||
}
|
||||
T![:] if p.at(T![::]) => {
|
||||
p.bump(T![::]);
|
||||
|
|
|
|||
|
|
@ -47,20 +47,20 @@ fn list_(p: &mut Parser, flavor: Flavor) {
|
|||
if let FnDef = flavor {
|
||||
// test self_param_outer_attr
|
||||
// fn f(#[must_use] self) {}
|
||||
attributes::outer_attributes(p);
|
||||
attributes::outer_attrs(p);
|
||||
opt_self_param(p);
|
||||
}
|
||||
|
||||
while !p.at(EOF) && !p.at(ket) {
|
||||
// test param_outer_arg
|
||||
// fn f(#[attr1] pat: Type) {}
|
||||
attributes::outer_attributes(p);
|
||||
attributes::outer_attrs(p);
|
||||
|
||||
if !p.at_ts(VALUE_PARAMETER_FIRST) {
|
||||
if !p.at_ts(PARAM_FIRST) {
|
||||
p.error("expected value parameter");
|
||||
break;
|
||||
}
|
||||
let param = value_parameter(p, flavor);
|
||||
let param = param(p, flavor);
|
||||
if !p.at(ket) {
|
||||
p.expect(T![,]);
|
||||
}
|
||||
|
|
@ -73,11 +73,11 @@ fn list_(p: &mut Parser, flavor: Flavor) {
|
|||
m.complete(p, PARAM_LIST);
|
||||
}
|
||||
|
||||
const VALUE_PARAMETER_FIRST: TokenSet = patterns::PATTERN_FIRST.union(types::TYPE_FIRST);
|
||||
const PARAM_FIRST: TokenSet = patterns::PATTERN_FIRST.union(types::TYPE_FIRST);
|
||||
|
||||
struct Variadic(bool);
|
||||
|
||||
fn value_parameter(p: &mut Parser, flavor: Flavor) -> Variadic {
|
||||
fn param(p: &mut Parser, flavor: Flavor) -> Variadic {
|
||||
let mut res = Variadic(false);
|
||||
let m = p.start();
|
||||
match flavor {
|
||||
|
|
|
|||
|
|
@ -105,11 +105,11 @@ fn opt_path_type_args(p: &mut Parser, mode: Mode) {
|
|||
// type F = Box<Fn(i32) -> ()>;
|
||||
if p.at(T!['(']) {
|
||||
params::param_list_fn_trait(p);
|
||||
opt_fn_ret_type(p);
|
||||
opt_ret_type(p);
|
||||
} else {
|
||||
type_args::opt_type_arg_list(p, false)
|
||||
type_args::opt_generic_arg_list(p, false)
|
||||
}
|
||||
}
|
||||
Mode::Expr => type_args::opt_type_arg_list(p, true),
|
||||
Mode::Expr => type_args::opt_generic_arg_list(p, true),
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,13 +79,13 @@ const PAT_RECOVERY_SET: TokenSet =
|
|||
fn atom_pat(p: &mut Parser, recovery_set: TokenSet) -> Option<CompletedMarker> {
|
||||
let m = match p.nth(0) {
|
||||
T![box] => box_pat(p),
|
||||
T![ref] | T![mut] => bind_pat(p, true),
|
||||
T![ref] | T![mut] => ident_pat(p, true),
|
||||
IDENT => match p.nth(1) {
|
||||
// Checks the token after an IDENT to see if a pattern is a path (Struct { .. }) or macro
|
||||
// (T![x]).
|
||||
T!['('] | T!['{'] | T![!] => path_or_macro_pat(p),
|
||||
T![:] if p.nth_at(1, T![::]) => path_or_macro_pat(p),
|
||||
_ => bind_pat(p, true),
|
||||
_ => ident_pat(p, true),
|
||||
},
|
||||
|
||||
// test type_path_in_pattern
|
||||
|
|
@ -93,8 +93,8 @@ fn atom_pat(p: &mut Parser, recovery_set: TokenSet) -> Option<CompletedMarker> {
|
|||
_ if paths::is_path_start(p) => path_or_macro_pat(p),
|
||||
_ if is_literal_pat_start(p) => literal_pat(p),
|
||||
|
||||
T![.] if p.at(T![..]) => dot_dot_pat(p),
|
||||
T![_] => placeholder_pat(p),
|
||||
T![.] if p.at(T![..]) => rest_pat(p),
|
||||
T![_] => wildcard_pat(p),
|
||||
T![&] => ref_pat(p),
|
||||
T!['('] => tuple_pat(p),
|
||||
T!['['] => slice_pat(p),
|
||||
|
|
@ -149,7 +149,7 @@ fn path_or_macro_pat(p: &mut Parser) -> CompletedMarker {
|
|||
TUPLE_STRUCT_PAT
|
||||
}
|
||||
T!['{'] => {
|
||||
record_field_pat_list(p);
|
||||
record_pat_field_list(p);
|
||||
RECORD_PAT
|
||||
}
|
||||
// test marco_pat
|
||||
|
|
@ -186,7 +186,7 @@ fn tuple_pat_fields(p: &mut Parser) {
|
|||
// let S { h: _, ..} = ();
|
||||
// let S { h: _, } = ();
|
||||
// }
|
||||
fn record_field_pat_list(p: &mut Parser) {
|
||||
fn record_pat_field_list(p: &mut Parser) {
|
||||
assert!(p.at(T!['{']));
|
||||
let m = p.start();
|
||||
p.bump(T!['{']);
|
||||
|
|
@ -214,7 +214,7 @@ fn record_field_pat_list(p: &mut Parser) {
|
|||
box_pat(p);
|
||||
}
|
||||
_ => {
|
||||
bind_pat(p, false);
|
||||
ident_pat(p, false);
|
||||
}
|
||||
}
|
||||
m.complete(p, RECORD_PAT_FIELD);
|
||||
|
|
@ -230,7 +230,7 @@ fn record_field_pat_list(p: &mut Parser) {
|
|||
|
||||
// test placeholder_pat
|
||||
// fn main() { let _ = (); }
|
||||
fn placeholder_pat(p: &mut Parser) -> CompletedMarker {
|
||||
fn wildcard_pat(p: &mut Parser) -> CompletedMarker {
|
||||
assert!(p.at(T![_]));
|
||||
let m = p.start();
|
||||
p.bump(T![_]);
|
||||
|
|
@ -263,7 +263,7 @@ fn placeholder_pat(p: &mut Parser) -> CompletedMarker {
|
|||
// let [head, .., mid, tail @ ..] = ();
|
||||
// let [head, .., mid, .., cons] = ();
|
||||
// }
|
||||
fn dot_dot_pat(p: &mut Parser) -> CompletedMarker {
|
||||
fn rest_pat(p: &mut Parser) -> CompletedMarker {
|
||||
assert!(p.at(T![..]));
|
||||
let m = p.start();
|
||||
p.bump(T![..]);
|
||||
|
|
@ -353,7 +353,7 @@ fn pat_list(p: &mut Parser, ket: SyntaxKind) {
|
|||
// let e @ _ = ();
|
||||
// let ref mut f @ g @ _ = ();
|
||||
// }
|
||||
fn bind_pat(p: &mut Parser, with_at: bool) -> CompletedMarker {
|
||||
fn ident_pat(p: &mut Parser, with_at: bool) -> CompletedMarker {
|
||||
let m = p.start();
|
||||
p.eat(T![ref]);
|
||||
p.eat(T![mut]);
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use super::*;
|
||||
|
||||
pub(super) fn opt_type_arg_list(p: &mut Parser, colon_colon_required: bool) {
|
||||
pub(super) fn opt_generic_arg_list(p: &mut Parser, colon_colon_required: bool) {
|
||||
let m;
|
||||
if p.at(T![::]) && p.nth(2) == T![<] {
|
||||
m = p.start();
|
||||
|
|
@ -16,7 +16,7 @@ pub(super) fn opt_type_arg_list(p: &mut Parser, colon_colon_required: bool) {
|
|||
}
|
||||
|
||||
while !p.at(EOF) && !p.at(T![>]) {
|
||||
type_arg(p);
|
||||
generic_arg(p);
|
||||
if !p.at(T![>]) && !p.expect(T![,]) {
|
||||
break;
|
||||
}
|
||||
|
|
@ -27,7 +27,7 @@ pub(super) fn opt_type_arg_list(p: &mut Parser, colon_colon_required: bool) {
|
|||
|
||||
// test type_arg
|
||||
// type A = B<'static, i32, 1, { 2 }, Item=u64>;
|
||||
fn type_arg(p: &mut Parser) {
|
||||
fn generic_arg(p: &mut Parser) {
|
||||
let m = p.start();
|
||||
match p.current() {
|
||||
LIFETIME => {
|
||||
|
|
|
|||
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
use super::*;
|
||||
|
||||
pub(super) fn opt_type_param_list(p: &mut Parser) {
|
||||
pub(super) fn opt_generic_param_list(p: &mut Parser) {
|
||||
if !p.at(T![<]) {
|
||||
return;
|
||||
}
|
||||
type_param_list(p);
|
||||
generic_param_list(p);
|
||||
}
|
||||
|
||||
fn type_param_list(p: &mut Parser) {
|
||||
fn generic_param_list(p: &mut Parser) {
|
||||
assert!(p.at(T![<]));
|
||||
let m = p.start();
|
||||
p.bump(T![<]);
|
||||
|
|
@ -20,12 +20,12 @@ fn type_param_list(p: &mut Parser) {
|
|||
// test generic_lifetime_type_attribute
|
||||
// fn foo<#[derive(Lifetime)] 'a, #[derive(Type)] T>(_: &'a T) {
|
||||
// }
|
||||
attributes::outer_attributes(p);
|
||||
attributes::outer_attrs(p);
|
||||
|
||||
match p.current() {
|
||||
LIFETIME => lifetime_param(p, m),
|
||||
IDENT => type_param(p, m),
|
||||
CONST_KW => type_const_param(p, m),
|
||||
CONST_KW => const_param(p, m),
|
||||
_ => {
|
||||
m.abandon(p);
|
||||
p.err_and_bump("expected type parameter")
|
||||
|
|
@ -65,7 +65,7 @@ fn type_param(p: &mut Parser, m: Marker) {
|
|||
|
||||
// test const_param
|
||||
// struct S<const N: u32>;
|
||||
fn type_const_param(p: &mut Parser, m: Marker) {
|
||||
fn const_param(p: &mut Parser, m: Marker) {
|
||||
assert!(p.at(CONST_KW));
|
||||
p.bump(T![const]);
|
||||
name(p);
|
||||
|
|
|
|||
|
|
@ -32,11 +32,11 @@ fn type_with_bounds_cond(p: &mut Parser, allow_bounds: bool) {
|
|||
match p.current() {
|
||||
T!['('] => paren_or_tuple_type(p),
|
||||
T![!] => never_type(p),
|
||||
T![*] => pointer_type(p),
|
||||
T![*] => ptr_type(p),
|
||||
T!['['] => array_or_slice_type(p),
|
||||
T![&] => reference_type(p),
|
||||
T![_] => placeholder_type(p),
|
||||
T![fn] | T![unsafe] | T![extern] => fn_pointer_type(p),
|
||||
T![&] => ref_type(p),
|
||||
T![_] => infer_type(p),
|
||||
T![fn] | T![unsafe] | T![extern] => fn_ptr_type(p),
|
||||
T![for] => for_type(p),
|
||||
T![impl] => impl_trait_type(p),
|
||||
T![dyn] => dyn_trait_type(p),
|
||||
|
|
@ -96,7 +96,7 @@ fn never_type(p: &mut Parser) {
|
|||
m.complete(p, NEVER_TYPE);
|
||||
}
|
||||
|
||||
fn pointer_type(p: &mut Parser) {
|
||||
fn ptr_type(p: &mut Parser) {
|
||||
assert!(p.at(T![*]));
|
||||
let m = p.start();
|
||||
p.bump(T![*]);
|
||||
|
|
@ -156,7 +156,7 @@ fn array_or_slice_type(p: &mut Parser) {
|
|||
// type A = &();
|
||||
// type B = &'static ();
|
||||
// type C = &mut ();
|
||||
fn reference_type(p: &mut Parser) {
|
||||
fn ref_type(p: &mut Parser) {
|
||||
assert!(p.at(T![&]));
|
||||
let m = p.start();
|
||||
p.bump(T![&]);
|
||||
|
|
@ -168,7 +168,7 @@ fn reference_type(p: &mut Parser) {
|
|||
|
||||
// test placeholder_type
|
||||
// type Placeholder = _;
|
||||
fn placeholder_type(p: &mut Parser) {
|
||||
fn infer_type(p: &mut Parser) {
|
||||
assert!(p.at(T![_]));
|
||||
let m = p.start();
|
||||
p.bump(T![_]);
|
||||
|
|
@ -180,7 +180,7 @@ fn placeholder_type(p: &mut Parser) {
|
|||
// type B = unsafe fn();
|
||||
// type C = unsafe extern "C" fn();
|
||||
// type D = extern "C" fn ( u8 , ... ) -> u8;
|
||||
fn fn_pointer_type(p: &mut Parser) {
|
||||
fn fn_ptr_type(p: &mut Parser) {
|
||||
let m = p.start();
|
||||
p.eat(T![unsafe]);
|
||||
if p.at(T![extern]) {
|
||||
|
|
@ -200,7 +200,7 @@ fn fn_pointer_type(p: &mut Parser) {
|
|||
}
|
||||
// test fn_pointer_type_with_ret
|
||||
// type F = fn() -> ();
|
||||
opt_fn_ret_type(p);
|
||||
opt_ret_type(p);
|
||||
m.complete(p, FN_PTR_TYPE);
|
||||
}
|
||||
|
||||
|
|
@ -208,7 +208,7 @@ pub(super) fn for_binder(p: &mut Parser) {
|
|||
assert!(p.at(T![for]));
|
||||
p.bump(T![for]);
|
||||
if p.at(T![<]) {
|
||||
type_params::opt_type_param_list(p);
|
||||
type_params::opt_generic_param_list(p);
|
||||
} else {
|
||||
p.error("expected `<`");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
[package]
|
||||
name = "paths"
|
||||
version = "0.1.0"
|
||||
version = "0.0.0"
|
||||
license = "MIT OR Apache-2.0"
|
||||
authors = ["rust-analyzer developers"]
|
||||
edition = "2018"
|
||||
license = "MIT OR Apache-2.0"
|
||||
|
||||
[lib]
|
||||
doctest = false
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
[package]
|
||||
edition = "2018"
|
||||
name = "proc_macro_api"
|
||||
version = "0.1.0"
|
||||
authors = ["rust-analyzer developers"]
|
||||
publish = false
|
||||
version = "0.0.0"
|
||||
license = "MIT OR Apache-2.0"
|
||||
authors = ["rust-analyzer developers"]
|
||||
edition = "2018"
|
||||
|
||||
[lib]
|
||||
doctest = false
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
[package]
|
||||
edition = "2018"
|
||||
name = "rust-analyzer"
|
||||
version = "0.1.0"
|
||||
version = "0.0.0"
|
||||
license = "MIT OR Apache-2.0"
|
||||
authors = ["rust-analyzer developers"]
|
||||
autobins = false
|
||||
license = "MIT OR Apache-2.0"
|
||||
edition = "2018"
|
||||
|
||||
[lib]
|
||||
doctest = false
|
||||
|
|
@ -30,12 +30,11 @@ serde_json = "1.0.48"
|
|||
threadpool = "1.7.1"
|
||||
rayon = "1.3.1"
|
||||
mimalloc = { version = "0.1.19", default-features = false, optional = true }
|
||||
lsp-server = "0.3.3"
|
||||
|
||||
stdx = { path = "../stdx" }
|
||||
|
||||
lsp-server = "0.3.3"
|
||||
flycheck = { path = "../flycheck" }
|
||||
ra_ide = { path = "../ra_ide" }
|
||||
ide = { path = "../ide" }
|
||||
profile = { path = "../profile" }
|
||||
project_model = { path = "../project_model" }
|
||||
syntax = { path = "../syntax" }
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
//! See `CargoTargetSpec`
|
||||
|
||||
use cfg::CfgExpr;
|
||||
use ide::{FileId, RunnableKind, TestId};
|
||||
use project_model::{self, TargetKind};
|
||||
use ra_ide::{FileId, RunnableKind, TestId};
|
||||
use vfs::AbsPathBuf;
|
||||
|
||||
use crate::{global_state::GlobalStateSnapshot, Result};
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ mod ssr;
|
|||
use std::io::Read;
|
||||
|
||||
use anyhow::Result;
|
||||
use ra_ide::Analysis;
|
||||
use ide::Analysis;
|
||||
use syntax::{AstNode, SourceFile};
|
||||
|
||||
pub use self::{
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ use base_db::{
|
|||
salsa::{Database, Durability},
|
||||
FileId,
|
||||
};
|
||||
use ra_ide::{Analysis, AnalysisChange, AnalysisHost, CompletionConfig, FilePosition, LineCol};
|
||||
use ide::{Analysis, AnalysisChange, AnalysisHost, CompletionConfig, FilePosition, LineCol};
|
||||
use vfs::AbsPathBuf;
|
||||
|
||||
use crate::{
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ use rustc_hash::FxHashSet;
|
|||
|
||||
use base_db::SourceDatabaseExt;
|
||||
use hir::Crate;
|
||||
use ra_ide::Severity;
|
||||
use ide::Severity;
|
||||
|
||||
use crate::cli::{load_cargo::load_cargo, Result};
|
||||
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@ use std::{path::Path, sync::Arc};
|
|||
use anyhow::Result;
|
||||
use base_db::CrateGraph;
|
||||
use crossbeam_channel::{unbounded, Receiver};
|
||||
use ide::{AnalysisChange, AnalysisHost};
|
||||
use project_model::{CargoConfig, ProcMacroClient, ProjectManifest, ProjectWorkspace};
|
||||
use ra_ide::{AnalysisChange, AnalysisHost};
|
||||
use vfs::{loader::Handle, AbsPath, AbsPathBuf};
|
||||
|
||||
use crate::reload::{ProjectFolders, SourceRootConfig};
|
||||
|
|
|
|||
|
|
@ -10,9 +10,9 @@
|
|||
use std::{ffi::OsString, path::PathBuf};
|
||||
|
||||
use flycheck::FlycheckConfig;
|
||||
use ide::{AssistConfig, CompletionConfig, HoverConfig, InlayHintsConfig};
|
||||
use lsp_types::ClientCapabilities;
|
||||
use project_model::{CargoConfig, ProjectJson, ProjectJsonData, ProjectManifest};
|
||||
use ra_ide::{AssistConfig, CompletionConfig, HoverConfig, InlayHintsConfig};
|
||||
use serde::Deserialize;
|
||||
use vfs::AbsPathBuf;
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ pub(crate) mod to_proto;
|
|||
|
||||
use std::{mem, sync::Arc};
|
||||
|
||||
use ra_ide::FileId;
|
||||
use ide::FileId;
|
||||
use rustc_hash::{FxHashMap, FxHashSet};
|
||||
|
||||
use crate::lsp_ext;
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
use std::convert::TryFrom;
|
||||
|
||||
use base_db::{FileId, FilePosition, FileRange};
|
||||
use ra_ide::{AssistKind, LineCol, LineIndex};
|
||||
use ide::{AssistKind, LineCol, LineIndex};
|
||||
use syntax::{TextRange, TextSize};
|
||||
use vfs::AbsPathBuf;
|
||||
|
||||
|
|
|
|||
|
|
@ -8,10 +8,10 @@ use std::{sync::Arc, time::Instant};
|
|||
use base_db::{CrateId, VfsPath};
|
||||
use crossbeam_channel::{unbounded, Receiver, Sender};
|
||||
use flycheck::FlycheckHandle;
|
||||
use ide::{Analysis, AnalysisChange, AnalysisHost, FileId};
|
||||
use lsp_types::{SemanticTokens, Url};
|
||||
use parking_lot::{Mutex, RwLock};
|
||||
use project_model::{CargoWorkspace, ProcMacroClient, ProjectWorkspace, Target};
|
||||
use ra_ide::{Analysis, AnalysisChange, AnalysisHost, FileId};
|
||||
use rustc_hash::FxHashMap;
|
||||
|
||||
use crate::{
|
||||
|
|
|
|||
|
|
@ -1,12 +1,16 @@
|
|||
//! This module is responsible for implementing handlers for Language Server
|
||||
//! Protocol. The majority of requests are fulfilled by calling into the
|
||||
//! `ra_ide` crate.
|
||||
//! `ide` crate.
|
||||
|
||||
use std::{
|
||||
io::Write as _,
|
||||
process::{self, Stdio},
|
||||
};
|
||||
|
||||
use ide::{
|
||||
FileId, FilePosition, FileRange, HoverAction, HoverGotoTypeData, NavigationTarget, Query,
|
||||
RangeInfo, Runnable, RunnableKind, SearchScope, TextEdit,
|
||||
};
|
||||
use lsp_server::ErrorCode;
|
||||
use lsp_types::{
|
||||
CallHierarchyIncomingCall, CallHierarchyIncomingCallsParams, CallHierarchyItem,
|
||||
|
|
@ -19,10 +23,6 @@ use lsp_types::{
|
|||
TextDocumentIdentifier, Url, WorkspaceEdit,
|
||||
};
|
||||
use project_model::TargetKind;
|
||||
use ra_ide::{
|
||||
FileId, FilePosition, FileRange, HoverAction, HoverGotoTypeData, NavigationTarget, Query,
|
||||
RangeInfo, Runnable, RunnableKind, SearchScope, TextEdit,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_json::to_value;
|
||||
use stdx::{format_to, split_once};
|
||||
|
|
@ -212,7 +212,7 @@ pub(crate) fn handle_on_type_formatting(
|
|||
let line_index = snap.analysis.file_line_index(position.file_id)?;
|
||||
let line_endings = snap.file_line_endings(position.file_id);
|
||||
|
||||
// in `ra_ide`, the `on_type` invariant is that
|
||||
// in `ide`, the `on_type` invariant is that
|
||||
// `text.char_at(position) == typed_char`.
|
||||
position.offset -= TextSize::of('.');
|
||||
let char_typed = params.ch.chars().next().unwrap_or('\0');
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
//! Implementation of the LSP for rust-analyzer.
|
||||
//!
|
||||
//! This crate takes Rust-specific analysis results from ra_ide and translates
|
||||
//! This crate takes Rust-specific analysis results from ide and translates
|
||||
//! into LSP types.
|
||||
//!
|
||||
//! It also is the root of all state. `world` module defines the bulk of the
|
||||
|
|
@ -41,7 +41,7 @@ use serde::de::DeserializeOwned;
|
|||
|
||||
pub type Result<T, E = Box<dyn std::error::Error + Send + Sync>> = std::result::Result<T, E>;
|
||||
pub use crate::{caps::server_capabilities, main_loop::main_loop};
|
||||
use ra_ide::AnalysisHost;
|
||||
use ide::AnalysisHost;
|
||||
use std::fmt;
|
||||
use vfs::Vfs;
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
use std::{error::Error, ops::Range};
|
||||
|
||||
use base_db::Canceled;
|
||||
use ide::LineIndex;
|
||||
use lsp_server::Notification;
|
||||
use ra_ide::LineIndex;
|
||||
|
||||
use crate::{from_proto, global_state::GlobalState};
|
||||
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@ use std::{
|
|||
|
||||
use base_db::VfsPath;
|
||||
use crossbeam_channel::{select, Receiver};
|
||||
use ide::{Canceled, FileId};
|
||||
use lsp_server::{Connection, Notification, Request, Response};
|
||||
use lsp_types::notification::Notification as _;
|
||||
use ra_ide::{Canceled, FileId};
|
||||
|
||||
use crate::{
|
||||
config::Config,
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue