mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 00:34:06 +00:00
Merge branch 'master' of https://github.com/rust-analyzer/rust-analyzer
This commit is contained in:
commit
514df15d9e
24
Cargo.lock
generated
24
Cargo.lock
generated
@ -45,7 +45,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "backtrace"
|
||||
version = "0.3.41"
|
||||
version = "0.3.42"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -463,10 +463,10 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "1.3.0"
|
||||
version = "1.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -730,7 +730,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "num_cpus"
|
||||
version = "1.11.1"
|
||||
version = "1.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -1038,7 +1038,7 @@ dependencies = [
|
||||
"either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"format-buf 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fst 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"indexmap 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"insta 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"join_to_string 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -1114,7 +1114,7 @@ dependencies = [
|
||||
name = "ra_prof"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"backtrace 0.3.41 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"backtrace 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"jemalloc-ctl 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"jemallocator 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -1353,7 +1353,7 @@ dependencies = [
|
||||
"crossbeam-queue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1449,7 +1449,7 @@ version = "0.14.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"crossbeam 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"indexmap 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"parking_lot 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -1631,7 +1631,7 @@ name = "threadpool"
|
||||
version = "1.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1781,7 +1781,7 @@ dependencies = [
|
||||
"checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
|
||||
"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
|
||||
"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
|
||||
"checksum backtrace 0.3.41 (registry+https://github.com/rust-lang/crates.io-index)" = "a4ed64ae6d9ebfd9893193c4b2532b1292ec97bd8271c9d7d0fa90cd78a34cba"
|
||||
"checksum backtrace 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)" = "b4b1549d804b6c73f4817df2ba073709e96e426f12987127c48e6745568c350b"
|
||||
"checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491"
|
||||
"checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
|
||||
"checksum bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e84c238982c4b1e1ee668d136c510c67a13465279c0cb367ea6baf6310620a80"
|
||||
@ -1832,7 +1832,7 @@ dependencies = [
|
||||
"checksum hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eff2656d88f158ce120947499e971d743c05dbcbed62e5bd2f38f1698bbc3772"
|
||||
"checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
|
||||
"checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9"
|
||||
"checksum indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712d7b3ea5827fcb9d4fda14bf4da5f136f0db2ae9c8f4bd4e2d1c6fde4e6db2"
|
||||
"checksum indexmap 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b54058f0a6ff80b6803da8faf8997cde53872b38f4023728f6830b06cd3c0dc"
|
||||
"checksum inotify 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24e40d6fd5d64e2082e0c796495c8ef5ad667a96d03e5aaa0becfd9d47bcbfb8"
|
||||
"checksum inotify-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e74a1aa87c59aeff6ef2cc2fa62d41bc43f54952f55652656b18a02fd5e356c0"
|
||||
"checksum insta 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0d499dc062e841590a67230d853bce62d0abeb91304927871670b7c55c461349"
|
||||
@ -1863,7 +1863,7 @@ dependencies = [
|
||||
"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88"
|
||||
"checksum notify 4.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "80ae4a7688d1fab81c5bf19c64fc8db920be8d519ce6336ed4e7efe024724dbd"
|
||||
"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
|
||||
"checksum num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72"
|
||||
"checksum num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "46203554f085ff89c235cd12f7075f3233af9b11ed7c9e16dfe2560d03313ce6"
|
||||
"checksum once_cell 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f5941ec2d5ee5916c709580d71553b81a633df245bcc73c04dcbd62152ceefc4"
|
||||
"checksum ordermap 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a86ed3f5f244b372d6b1a00b72ef7f8876d0bc6a78a4c9985c53614041512063"
|
||||
"checksum parking_lot 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "92e98c49ab0b7ce5b222f2cc9193fc4efe11c6d0bd4f648e374684a6857b1cfc"
|
||||
|
@ -386,11 +386,11 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
|
||||
let lhs_ty = self.infer_expr(*lhs, &lhs_expectation);
|
||||
// FIXME: find implementation of trait corresponding to operation
|
||||
// symbol and resolve associated `Output` type
|
||||
let rhs_expectation = op::binary_op_rhs_expectation(*op, lhs_ty);
|
||||
let rhs_expectation = op::binary_op_rhs_expectation(*op, lhs_ty.clone());
|
||||
let rhs_ty = self.infer_expr(*rhs, &Expectation::has_type(rhs_expectation));
|
||||
|
||||
// FIXME: similar as above, return ty is often associated trait type
|
||||
op::binary_op_return_ty(*op, rhs_ty)
|
||||
op::binary_op_return_ty(*op, lhs_ty, rhs_ty)
|
||||
}
|
||||
_ => Ty::Unknown,
|
||||
},
|
||||
|
@ -1,13 +1,21 @@
|
||||
//! FIXME: write short doc here
|
||||
use hir_def::expr::{BinaryOp, CmpOp};
|
||||
//! Helper functions for binary operator type inference.
|
||||
use hir_def::expr::{ArithOp, BinaryOp, CmpOp};
|
||||
|
||||
use super::{InferTy, Ty, TypeCtor};
|
||||
use crate::ApplicationTy;
|
||||
|
||||
pub(super) fn binary_op_return_ty(op: BinaryOp, rhs_ty: Ty) -> Ty {
|
||||
pub(super) fn binary_op_return_ty(op: BinaryOp, lhs_ty: Ty, rhs_ty: Ty) -> Ty {
|
||||
match op {
|
||||
BinaryOp::LogicOp(_) | BinaryOp::CmpOp(_) => Ty::simple(TypeCtor::Bool),
|
||||
BinaryOp::Assignment { .. } => Ty::unit(),
|
||||
BinaryOp::ArithOp(ArithOp::Shl) | BinaryOp::ArithOp(ArithOp::Shr) => match lhs_ty {
|
||||
Ty::Apply(ApplicationTy { ctor, .. }) => match ctor {
|
||||
TypeCtor::Int(..) | TypeCtor::Float(..) => lhs_ty,
|
||||
_ => Ty::Unknown,
|
||||
},
|
||||
Ty::Infer(InferTy::IntVar(..)) | Ty::Infer(InferTy::FloatVar(..)) => lhs_ty,
|
||||
_ => Ty::Unknown,
|
||||
},
|
||||
BinaryOp::ArithOp(_) => match rhs_ty {
|
||||
Ty::Apply(ApplicationTy { ctor, .. }) => match ctor {
|
||||
TypeCtor::Int(..) | TypeCtor::Float(..) => rhs_ty,
|
||||
@ -36,6 +44,7 @@ pub(super) fn binary_op_rhs_expectation(op: BinaryOp, lhs_ty: Ty) -> Ty {
|
||||
_ => Ty::Unknown,
|
||||
}
|
||||
}
|
||||
BinaryOp::ArithOp(ArithOp::Shl) | BinaryOp::ArithOp(ArithOp::Shr) => Ty::Unknown,
|
||||
BinaryOp::CmpOp(CmpOp::Ord { .. })
|
||||
| BinaryOp::Assignment { op: Some(_) }
|
||||
| BinaryOp::ArithOp(_) => match lhs_ty {
|
||||
|
@ -613,6 +613,27 @@ fn test() -> bool {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn infer_shift_op() {
|
||||
assert_snapshot!(
|
||||
infer(r#"
|
||||
fn test() {
|
||||
1u32 << 5u8;
|
||||
1u32 >> 5u8;
|
||||
}
|
||||
"#),
|
||||
@r###"
|
||||
[11; 48) '{ ...5u8; }': ()
|
||||
[17; 21) '1u32': u32
|
||||
[17; 28) '1u32 << 5u8': u32
|
||||
[25; 28) '5u8': u8
|
||||
[34; 38) '1u32': u32
|
||||
[34; 45) '1u32 >> 5u8': u32
|
||||
[42; 45) '5u8': u8
|
||||
"###
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn infer_field_autoderef() {
|
||||
assert_snapshot!(
|
||||
|
@ -169,9 +169,22 @@ impl From<&'_ ast::FnDef> for FunctionSignature {
|
||||
res.push(self_param.syntax().text().to_string())
|
||||
}
|
||||
|
||||
res.extend(param_list.params().map(|param| {
|
||||
param.pat().map(|pat| pat.syntax().text().to_string()).unwrap_or_default()
|
||||
}));
|
||||
res.extend(
|
||||
param_list
|
||||
.params()
|
||||
.map(|param| {
|
||||
Some(
|
||||
param
|
||||
.pat()?
|
||||
.syntax()
|
||||
.descendants()
|
||||
.find_map(ast::Name::cast)?
|
||||
.text()
|
||||
.to_string(),
|
||||
)
|
||||
})
|
||||
.map(|param| param.unwrap_or_default()),
|
||||
);
|
||||
}
|
||||
res
|
||||
}
|
||||
|
@ -116,7 +116,7 @@ fn get_param_name_hints(
|
||||
let hints = parameters
|
||||
.zip(args)
|
||||
.filter_map(|(param, arg)| {
|
||||
if arg.syntax().kind() == SyntaxKind::LITERAL {
|
||||
if arg.syntax().kind() == SyntaxKind::LITERAL && !param.is_empty() {
|
||||
Some((arg.syntax().text_range(), param))
|
||||
} else {
|
||||
None
|
||||
@ -683,12 +683,12 @@ fn main() {
|
||||
struct Test {}
|
||||
|
||||
impl Test {
|
||||
fn method(&self, param: i32) -> i32 {
|
||||
fn method(&self, mut param: i32) -> i32 {
|
||||
param * 2
|
||||
}
|
||||
}
|
||||
|
||||
fn test_func(foo: i32, bar: i32, msg: &str, _: i32, last: i32) -> i32 {
|
||||
fn test_func(mut foo: i32, bar: i32, msg: &str, _: i32, last: i32) -> i32 {
|
||||
foo + bar
|
||||
}
|
||||
|
||||
@ -704,37 +704,32 @@ fn main() {
|
||||
assert_debug_snapshot!(analysis.inlay_hints(file_id, None).unwrap(), @r###"
|
||||
[
|
||||
InlayHint {
|
||||
range: [207; 218),
|
||||
range: [215; 226),
|
||||
kind: TypeHint,
|
||||
label: "i32",
|
||||
},
|
||||
InlayHint {
|
||||
range: [251; 252),
|
||||
range: [259; 260),
|
||||
kind: ParameterHint,
|
||||
label: "foo",
|
||||
},
|
||||
InlayHint {
|
||||
range: [254; 255),
|
||||
range: [262; 263),
|
||||
kind: ParameterHint,
|
||||
label: "bar",
|
||||
},
|
||||
InlayHint {
|
||||
range: [257; 264),
|
||||
range: [265; 272),
|
||||
kind: ParameterHint,
|
||||
label: "msg",
|
||||
},
|
||||
InlayHint {
|
||||
range: [266; 267),
|
||||
kind: ParameterHint,
|
||||
label: "_",
|
||||
},
|
||||
InlayHint {
|
||||
range: [323; 326),
|
||||
range: [331; 334),
|
||||
kind: ParameterHint,
|
||||
label: "param",
|
||||
},
|
||||
InlayHint {
|
||||
range: [350; 354),
|
||||
range: [358; 362),
|
||||
kind: ParameterHint,
|
||||
label: "param",
|
||||
},
|
||||
|
@ -1,7 +1,7 @@
|
||||
//! This is the actual "grammar" of the Rust language.
|
||||
//!
|
||||
//! Each function in this module and its children corresponds
|
||||
//! to a production of the format grammar. Submodules roughly
|
||||
//! to a production of the formal grammar. Submodules roughly
|
||||
//! correspond to different *areas* of the grammar. By convention,
|
||||
//! each submodule starts with `use super::*` import and exports
|
||||
//! "public" productions via `pub(super)`.
|
||||
|
@ -19,6 +19,26 @@ pub(super) fn expr(p: &mut Parser) -> (Option<CompletedMarker>, BlockLike) {
|
||||
expr_bp(p, r, 1)
|
||||
}
|
||||
|
||||
pub(super) fn expr_with_attrs(p: &mut Parser) -> bool {
|
||||
let m = p.start();
|
||||
let has_attrs = p.at(T![#]);
|
||||
attributes::outer_attributes(p);
|
||||
|
||||
let (cm, _block_like) = expr(p);
|
||||
let success = cm.is_some();
|
||||
|
||||
match (has_attrs, cm) {
|
||||
(true, Some(cm)) => {
|
||||
let kind = cm.kind();
|
||||
cm.undo_completion(p).abandon(p);
|
||||
m.complete(p, kind);
|
||||
}
|
||||
_ => m.abandon(p),
|
||||
}
|
||||
|
||||
success
|
||||
}
|
||||
|
||||
pub(super) fn expr_stmt(p: &mut Parser) -> (Option<CompletedMarker>, BlockLike) {
|
||||
let r = Restrictions { forbid_structs: false, prefer_stmt: true };
|
||||
expr_bp(p, r, 1)
|
||||
@ -540,11 +560,13 @@ fn arg_list(p: &mut Parser) {
|
||||
let m = p.start();
|
||||
p.bump(T!['(']);
|
||||
while !p.at(T![')']) && !p.at(EOF) {
|
||||
if !p.at_ts(EXPR_FIRST) {
|
||||
p.error("expected expression");
|
||||
// test arg_with_attr
|
||||
// fn main() {
|
||||
// foo(#[attr] 92)
|
||||
// }
|
||||
if !expr_with_attrs(p) {
|
||||
break;
|
||||
}
|
||||
expr(p);
|
||||
if !p.at(T![')']) && !p.expect(T![,]) {
|
||||
break;
|
||||
}
|
||||
|
@ -191,19 +191,8 @@ fn array_expr(p: &mut Parser) -> CompletedMarker {
|
||||
|
||||
// test array_attrs
|
||||
// const A: &[i64] = &[1, #[cfg(test)] 2];
|
||||
let m = p.start();
|
||||
let has_attrs = p.at(T![#]);
|
||||
attributes::outer_attributes(p);
|
||||
|
||||
let cm = expr(p).0;
|
||||
|
||||
match (has_attrs, cm) {
|
||||
(true, Some(cm)) => {
|
||||
let kind = cm.kind();
|
||||
cm.undo_completion(p).abandon(p);
|
||||
m.complete(p, kind);
|
||||
}
|
||||
_ => m.abandon(p),
|
||||
if !expr_with_attrs(p) {
|
||||
break;
|
||||
}
|
||||
|
||||
if n_exprs == 1 && p.eat(T![;]) {
|
||||
|
@ -12,8 +12,8 @@ SOURCE_FILE@[0; 112)
|
||||
BLOCK@[7; 33)
|
||||
L_CURLY@[7; 8) "{"
|
||||
WHITESPACE@[8; 9) " "
|
||||
EXPR_STMT@[9; 26)
|
||||
ARRAY_EXPR@[9; 26)
|
||||
EXPR_STMT@[9; 17)
|
||||
ARRAY_EXPR@[9; 17)
|
||||
L_BRACK@[9; 10) "["
|
||||
LITERAL@[10; 11)
|
||||
INT_NUMBER@[10; 11) "1"
|
||||
@ -25,10 +25,13 @@ SOURCE_FILE@[0; 112)
|
||||
WHITESPACE@[15; 16) " "
|
||||
ERROR@[16; 17)
|
||||
AT@[16; 17) "@"
|
||||
EXPR_STMT@[17; 18)
|
||||
ERROR@[17; 18)
|
||||
COMMA@[17; 18) ","
|
||||
WHITESPACE@[18; 19) " "
|
||||
ERROR@[19; 25)
|
||||
STRUCT_KW@[19; 25) "struct"
|
||||
WHITESPACE@[18; 19) " "
|
||||
STRUCT_DEF@[19; 26)
|
||||
STRUCT_KW@[19; 25) "struct"
|
||||
ERROR@[25; 26)
|
||||
COMMA@[25; 26) ","
|
||||
WHITESPACE@[26; 27) " "
|
||||
LET_STMT@[27; 31)
|
||||
@ -51,14 +54,14 @@ SOURCE_FILE@[0; 112)
|
||||
BLOCK@[41; 68)
|
||||
L_CURLY@[41; 42) "{"
|
||||
WHITESPACE@[42; 43) " "
|
||||
EXPR_STMT@[43; 52)
|
||||
CALL_EXPR@[43; 52)
|
||||
EXPR_STMT@[43; 54)
|
||||
CALL_EXPR@[43; 54)
|
||||
PATH_EXPR@[43; 46)
|
||||
PATH@[43; 46)
|
||||
PATH_SEGMENT@[43; 46)
|
||||
NAME_REF@[43; 46)
|
||||
IDENT@[43; 46) "foo"
|
||||
ARG_LIST@[46; 52)
|
||||
ARG_LIST@[46; 54)
|
||||
L_PAREN@[46; 47) "("
|
||||
LITERAL@[47; 48)
|
||||
INT_NUMBER@[47; 48) "1"
|
||||
@ -67,10 +70,9 @@ SOURCE_FILE@[0; 112)
|
||||
LITERAL@[50; 51)
|
||||
INT_NUMBER@[50; 51) "2"
|
||||
COMMA@[51; 52) ","
|
||||
WHITESPACE@[52; 53) " "
|
||||
EXPR_STMT@[53; 54)
|
||||
ERROR@[53; 54)
|
||||
AT@[53; 54) "@"
|
||||
WHITESPACE@[52; 53) " "
|
||||
ERROR@[53; 54)
|
||||
AT@[53; 54) "@"
|
||||
EXPR_STMT@[54; 55)
|
||||
ERROR@[54; 55)
|
||||
COMMA@[54; 55) ","
|
||||
@ -101,8 +103,8 @@ SOURCE_FILE@[0; 112)
|
||||
BLOCK@[76; 111)
|
||||
L_CURLY@[76; 77) "{"
|
||||
WHITESPACE@[77; 78) " "
|
||||
EXPR_STMT@[78; 91)
|
||||
METHOD_CALL_EXPR@[78; 91)
|
||||
EXPR_STMT@[78; 93)
|
||||
METHOD_CALL_EXPR@[78; 93)
|
||||
PATH_EXPR@[78; 81)
|
||||
PATH@[78; 81)
|
||||
PATH_SEGMENT@[78; 81)
|
||||
@ -111,7 +113,7 @@ SOURCE_FILE@[0; 112)
|
||||
DOT@[81; 82) "."
|
||||
NAME_REF@[82; 85)
|
||||
IDENT@[82; 85) "bar"
|
||||
ARG_LIST@[85; 91)
|
||||
ARG_LIST@[85; 93)
|
||||
L_PAREN@[85; 86) "("
|
||||
LITERAL@[86; 87)
|
||||
INT_NUMBER@[86; 87) "1"
|
||||
@ -120,10 +122,9 @@ SOURCE_FILE@[0; 112)
|
||||
LITERAL@[89; 90)
|
||||
INT_NUMBER@[89; 90) "2"
|
||||
COMMA@[90; 91) ","
|
||||
WHITESPACE@[91; 92) " "
|
||||
EXPR_STMT@[92; 93)
|
||||
ERROR@[92; 93)
|
||||
AT@[92; 93) "@"
|
||||
WHITESPACE@[91; 92) " "
|
||||
ERROR@[92; 93)
|
||||
AT@[92; 93) "@"
|
||||
EXPR_STMT@[93; 94)
|
||||
ERROR@[93; 94)
|
||||
COMMA@[93; 94) ","
|
||||
@ -148,15 +149,14 @@ SOURCE_FILE@[0; 112)
|
||||
R_CURLY@[110; 111) "}"
|
||||
WHITESPACE@[111; 112) "\n"
|
||||
error 16: expected expression
|
||||
error 19: expected expression
|
||||
error 26: expected expression
|
||||
error 26: expected COMMA
|
||||
error 26: expected R_BRACK
|
||||
error 26: expected SEMI
|
||||
error 17: expected R_BRACK
|
||||
error 17: expected SEMI
|
||||
error 17: expected expression
|
||||
error 18: expected SEMI
|
||||
error 25: expected a name
|
||||
error 26: expected `;`, `{`, or `(`
|
||||
error 30: expected pattern
|
||||
error 31: expected SEMI
|
||||
error 52: expected expression
|
||||
error 52: expected SEMI
|
||||
error 53: expected expression
|
||||
error 54: expected SEMI
|
||||
error 54: expected expression
|
||||
@ -168,8 +168,6 @@ error 61: expected SEMI
|
||||
error 65: expected pattern
|
||||
error 65: expected SEMI
|
||||
error 65: expected expression
|
||||
error 91: expected expression
|
||||
error 91: expected SEMI
|
||||
error 92: expected expression
|
||||
error 93: expected SEMI
|
||||
error 93: expected expression
|
||||
|
@ -0,0 +1,3 @@
|
||||
fn main() {
|
||||
foo(#[attr] 92)
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
SOURCE_FILE@[0; 34)
|
||||
FN_DEF@[0; 33)
|
||||
FN_KW@[0; 2) "fn"
|
||||
WHITESPACE@[2; 3) " "
|
||||
NAME@[3; 7)
|
||||
IDENT@[3; 7) "main"
|
||||
PARAM_LIST@[7; 9)
|
||||
L_PAREN@[7; 8) "("
|
||||
R_PAREN@[8; 9) ")"
|
||||
WHITESPACE@[9; 10) " "
|
||||
BLOCK_EXPR@[10; 33)
|
||||
BLOCK@[10; 33)
|
||||
L_CURLY@[10; 11) "{"
|
||||
WHITESPACE@[11; 16) "\n "
|
||||
CALL_EXPR@[16; 31)
|
||||
PATH_EXPR@[16; 19)
|
||||
PATH@[16; 19)
|
||||
PATH_SEGMENT@[16; 19)
|
||||
NAME_REF@[16; 19)
|
||||
IDENT@[16; 19) "foo"
|
||||
ARG_LIST@[19; 31)
|
||||
L_PAREN@[19; 20) "("
|
||||
LITERAL@[20; 30)
|
||||
ATTR@[20; 27)
|
||||
POUND@[20; 21) "#"
|
||||
L_BRACK@[21; 22) "["
|
||||
PATH@[22; 26)
|
||||
PATH_SEGMENT@[22; 26)
|
||||
NAME_REF@[22; 26)
|
||||
IDENT@[22; 26) "attr"
|
||||
R_BRACK@[26; 27) "]"
|
||||
WHITESPACE@[27; 28) " "
|
||||
INT_NUMBER@[28; 30) "92"
|
||||
R_PAREN@[30; 31) ")"
|
||||
WHITESPACE@[31; 32) "\n"
|
||||
R_CURLY@[32; 33) "}"
|
||||
WHITESPACE@[33; 34) "\n"
|
@ -210,9 +210,9 @@
|
||||
;; inlay hints
|
||||
(defun rust-analyzer--update-inlay-hints (buffer)
|
||||
(if (and (rust-analyzer--initialized?) (eq buffer (current-buffer)))
|
||||
(lsp-send-request-async
|
||||
(lsp-make-request "rust-analyzer/inlayHints"
|
||||
(list :textDocument (lsp--text-document-identifier)))
|
||||
(lsp-request-async
|
||||
"rust-analyzer/inlayHints"
|
||||
(list :textDocument (lsp--text-document-identifier))
|
||||
(lambda (res)
|
||||
(remove-overlays (point-min) (point-max) 'rust-analyzer--inlay-hint t)
|
||||
(dolist (hint res)
|
||||
@ -221,9 +221,16 @@
|
||||
(overlay (make-overlay beg end)))
|
||||
(overlay-put overlay 'rust-analyzer--inlay-hint t)
|
||||
(overlay-put overlay 'evaporate t)
|
||||
(overlay-put overlay 'after-string (propertize (concat ": " label)
|
||||
'font-lock-face 'font-lock-comment-face)))))
|
||||
'tick))
|
||||
(cond
|
||||
((string= kind "TypeHint")
|
||||
(overlay-put overlay 'after-string (propertize (concat ": " label)
|
||||
'font-lock-face 'font-lock-comment-face)))
|
||||
((string= kind "ParameterHint")
|
||||
(overlay-put overlay 'before-string (propertize (concat label ": ")
|
||||
'font-lock-face 'font-lock-comment-face)))
|
||||
)
|
||||
)))
|
||||
:mode 'tick))
|
||||
nil)
|
||||
|
||||
(defvar-local rust-analyzer--inlay-hints-timer nil)
|
||||
|
@ -1,4 +1,4 @@
|
||||
//! This module generate AST datatype used by rust-analyzer.
|
||||
//! This module generates AST datatype used by rust-analyzer.
|
||||
//!
|
||||
//! Specifically, it generates the `SyntaxKind` enum and a number of newtype
|
||||
//! wrappers around `SyntaxNode` which implement `ra_syntax::AstNode`.
|
||||
|
@ -53,6 +53,7 @@ fn reformat(text: impl std::fmt::Display) -> Result<String> {
|
||||
write!(rustfmt.stdin.take().unwrap(), "{}", text)?;
|
||||
let output = rustfmt.wait_with_output()?;
|
||||
let stdout = String::from_utf8(output.stdout)?;
|
||||
// TODO: update the preable: replace ra_tools with the relevant path
|
||||
let preamble = "Generated file, do not edit by hand, see `crate/ra_tools/src/codegen`";
|
||||
Ok(format!("//! {}\n\n{}", preamble, stdout))
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user