diff --git a/Cargo.lock b/Cargo.lock index e63dcc530f..234c314067 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -125,9 +125,9 @@ checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] name = "chalk-derive" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eea3a22f0c30b2504ac4ab58934dac0d00b92a4d7788df32795cabca24c3f929" +checksum = "654c611946ba2629c5028cb7708687af975faf2c29d731824cb294c873df4697" dependencies = [ "proc-macro2", "quote", @@ -137,9 +137,9 @@ dependencies = [ [[package]] name = "chalk-ir" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb617b643e145e3b151502799e91a9625dd5daf1cf05dc2cb821bc75ae0c9cbd" +checksum = "0a5341fbc654ca886b73b804a36aebf0e621057ccc1a68e9815b5b39b3ac9ae8" dependencies = [ "chalk-derive", "lazy_static", @@ -147,9 +147,9 @@ dependencies = [ [[package]] name = "chalk-recursive" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d280565c8eefbf9b2bc615df49c7dfd971faad37774bf65734e626fd23864bd6" +checksum = "4484807b155b5a411e6135d330295f9ba5042e2920b8712c6574ca6ea91e9ee5" dependencies = [ "chalk-derive", "chalk-ir", @@ -160,9 +160,9 @@ dependencies = [ [[package]] name = "chalk-solve" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be906fbca3f3077dce0e76d9864771d0f450c946af0d86b569fb9504148a065a" +checksum = "281f82facd2538997fbe52132b1941ed213d266748215c31d15f62a8664429ad" dependencies = [ "chalk-derive", "chalk-ir", @@ -607,9 +607,9 @@ dependencies = [ [[package]] name = "lsp-types" -version = "0.78.0" +version = "0.79.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2e6cf68e3492cfa2035f0382c1da1b6ab045db0320feca505b86b4f13d66c27" +checksum = "7f1f86677fdbe8df5f88b99131b1424e50aad27bbe3e5900d221bc414bd72e9b" dependencies = [ "base64", "bitflags", @@ -842,9 +842,9 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "perf-event" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cb38a2f363560fb3cfcb47f28848b245a41c7e0d63e0b190918b712b6bf6803" +checksum = "76c42ba5d85a2f4472b99f475fb60cf336d9b4c85b1ea8bb300fef2e3c7c8f89" dependencies = [ "libc", "perf-event-open-sys", @@ -1344,9 +1344,9 @@ dependencies = [ [[package]] name = "rustc-ap-rustc_lexer" -version = "669.0.0" +version = "671.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456af5f09c006cf6c22c1a433ee0232c4bb74bdc6c647a010166a47c94ed2a63" +checksum = "22e1221f3bfa2943c942cf8da319ab2346887f8757778c29c7f1822cd27b521f" dependencies = [ "unicode-xid", ] diff --git a/crates/ra_hir_ty/Cargo.toml b/crates/ra_hir_ty/Cargo.toml index 7242e2cb6d..623ce261a0 100644 --- a/crates/ra_hir_ty/Cargo.toml +++ b/crates/ra_hir_ty/Cargo.toml @@ -28,9 +28,9 @@ test_utils = { path = "../test_utils" } scoped-tls = "1" -chalk-solve = { version = "0.18.0" } -chalk-ir = { version = "0.18.0" } -chalk-recursive = { version = "0.18.0" } +chalk-solve = { version = "0.19.0" } +chalk-ir = { version = "0.19.0" } +chalk-recursive = { version = "0.19.0" } [dev-dependencies] expect = { path = "../expect" } diff --git a/crates/ra_hir_ty/src/traits/chalk.rs b/crates/ra_hir_ty/src/traits/chalk.rs index 5298dbecf9..1c70653644 100644 --- a/crates/ra_hir_ty/src/traits/chalk.rs +++ b/crates/ra_hir_ty/src/traits/chalk.rs @@ -183,6 +183,7 @@ impl<'a> chalk_solve::RustIrDatabase for ChalkContext<'a> { .collect(), 1, ), + where_clauses: make_binders(vec![], 0), }; let num_vars = datas.num_binders; Arc::new(OpaqueTyDatum { opaque_ty_id: id, bound: make_binders(bound, num_vars) }) @@ -193,15 +194,6 @@ impl<'a> chalk_solve::RustIrDatabase for ChalkContext<'a> { Ty::Unknown.to_chalk(self.db) } - fn force_impl_for( - &self, - _well_known: rust_ir::WellKnownTrait, - _ty: &chalk_ir::TyData, - ) -> Option { - // this method is mostly for rustc - None - } - fn is_object_safe(&self, _trait_id: chalk_ir::TraitId) -> bool { // FIXME: implement actual object safety true @@ -547,8 +539,13 @@ pub(crate) fn fn_def_datum_query( ), where_clauses, }; - let datum = - FnDefDatum { id: fn_def_id, binders: make_binders(bound, sig.num_binders), abi: () }; + let datum = FnDefDatum { + id: fn_def_id, + abi: (), + safety: chalk_ir::Safety::Safe, + variadic: sig.value.is_varargs, + binders: make_binders(bound, sig.num_binders), + }; Arc::new(datum) } diff --git a/crates/ra_hir_ty/src/traits/chalk/mapping.rs b/crates/ra_hir_ty/src/traits/chalk/mapping.rs index 09d8347caa..b3e92993d2 100644 --- a/crates/ra_hir_ty/src/traits/chalk/mapping.rs +++ b/crates/ra_hir_ty/src/traits/chalk/mapping.rs @@ -30,11 +30,16 @@ impl ToChalk for Ty { Ty::Apply(apply_ty) => match apply_ty.ctor { TypeCtor::Ref(m) => ref_to_chalk(db, m, apply_ty.parameters), TypeCtor::Array => array_to_chalk(db, apply_ty.parameters), - TypeCtor::FnPtr { num_args: _, is_varargs: _ } => { - // FIXME: handle is_varargs + TypeCtor::FnPtr { num_args: _, is_varargs } => { let substitution = apply_ty.parameters.to_chalk(db).shifted_in(&Interner); - chalk_ir::TyData::Function(chalk_ir::Fn { num_binders: 0, substitution }) - .intern(&Interner) + chalk_ir::TyData::Function(chalk_ir::FnPointer { + num_binders: 0, + abi: (), + safety: chalk_ir::Safety::Safe, + variadic: is_varargs, + substitution, + }) + .intern(&Interner) } _ => { let name = apply_ty.ctor.to_chalk(db); @@ -118,7 +123,12 @@ impl ToChalk for Ty { let parameters = from_chalk(db, opaque_ty.substitution); Ty::Opaque(OpaqueTy { opaque_ty_id: impl_trait_id, parameters }) } - chalk_ir::TyData::Function(chalk_ir::Fn { num_binders, substitution }) => { + chalk_ir::TyData::Function(chalk_ir::FnPointer { + num_binders, + variadic, + substitution, + .. + }) => { assert_eq!(num_binders, 0); let parameters: Substs = from_chalk( db, @@ -127,7 +137,7 @@ impl ToChalk for Ty { Ty::Apply(ApplicationTy { ctor: TypeCtor::FnPtr { num_args: (parameters.len() - 1) as u16, - is_varargs: false, + is_varargs: variadic, }, parameters, }) diff --git a/crates/ra_syntax/Cargo.toml b/crates/ra_syntax/Cargo.toml index 670f04578a..fc4d7aa048 100644 --- a/crates/ra_syntax/Cargo.toml +++ b/crates/ra_syntax/Cargo.toml @@ -13,7 +13,7 @@ doctest = false [dependencies] itertools = "0.9.0" rowan = "0.10.0" -rustc_lexer = { version = "669.0.0", package = "rustc-ap-rustc_lexer" } +rustc_lexer = { version = "671.0.0", package = "rustc-ap-rustc_lexer" } rustc-hash = "1.1.0" arrayvec = "0.5.1" once_cell = "1.3.1" diff --git a/crates/ra_syntax/src/ast/expr_ext.rs b/crates/ra_syntax/src/ast/expr_ext.rs index 365f942871..f5ba872233 100644 --- a/crates/ra_syntax/src/ast/expr_ext.rs +++ b/crates/ra_syntax/src/ast/expr_ext.rs @@ -333,13 +333,12 @@ impl ast::Literal { match token.kind() { INT_NUMBER => { - // FYI: there was a bug here previously, thus an if statement bellow is necessary. + // FYI: there was a bug here previously, thus the if statement below is necessary. // The lexer treats e.g. `1f64` as an integer literal. See // https://github.com/rust-analyzer/rust-analyzer/issues/1592 // and the comments on the linked PR. let text = token.text(); - if let suffix @ Some(_) = Self::find_suffix(&text, &FLOAT_SUFFIXES) { LiteralKind::FloatNumber { suffix } } else { diff --git a/crates/rust-analyzer/Cargo.toml b/crates/rust-analyzer/Cargo.toml index 931fc61edd..02c1371ac0 100644 --- a/crates/rust-analyzer/Cargo.toml +++ b/crates/rust-analyzer/Cargo.toml @@ -20,7 +20,7 @@ env_logger = { version = "0.7.1", default-features = false } itertools = "0.9.0" jod-thread = "0.1.0" log = "0.4.8" -lsp-types = { version = "0.78.0", features = ["proposed"] } +lsp-types = { version = "0.79.0", features = ["proposed"] } parking_lot = "0.11.0" pico-args = "0.3.1" oorandom = "11.1.2" @@ -42,7 +42,7 @@ ra_syntax = { path = "../ra_syntax" } ra_text_edit = { path = "../ra_text_edit" } vfs = { path = "../vfs" } vfs-notify = { path = "../vfs-notify" } -ra_cfg = { path = "../ra_cfg"} +ra_cfg = { path = "../ra_cfg" } ra_toolchain = { path = "../ra_toolchain" } # This should only be used in CLI