Merge #4889
4889: Deprecate hir::Path::from_ast r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
diff --git a/crates/ra_assists/src/ast_transform.rs b/crates/ra_assists/src/ast_transform.rs
index 3079a02..00fa95b 100644
--- a/crates/ra_assists/src/ast_transform.rs
+++ b/crates/ra_assists/src/ast_transform.rs
@@ -106,6 +106,7 @@
_ => return None,
};
// FIXME: use `hir::Path::from_src` instead.
+ #[allow(deprecated)]
let path = hir::Path::from_ast(path)?;
let resolution = self.source_scope.resolve_hir_path(&path)?;
match resolution {
@@ -150,6 +151,7 @@
return None;
}
// FIXME: use `hir::Path::from_src` instead.
+ #[allow(deprecated)]
let hir_path = hir::Path::from_ast(p.clone());
let resolution = self.source_scope.resolve_hir_path(&hir_path?)?;
match resolution {
diff --git a/crates/ra_hir_def/src/path.rs b/crates/ra_hir_def/src/path.rs
index ba16442..190d6d9 100644
--- a/crates/ra_hir_def/src/path.rs
+++ b/crates/ra_hir_def/src/path.rs
@@ -154,7 +154,7 @@
impl Path {
/// Converts an `ast::Path` to `Path`. Works with use trees.
- /// DEPRECATED: It does not handle `$crate` from macro call.
+ #[deprecated = "Doesn't handle hygiene, don't add new calls, remove old ones"]
pub fn from_ast(path: ast::Path) -> Option<Path> {
lower::lower_path(path, &Hygiene::new_unhygienic())
}
diff --git a/crates/ra_ide/src/completion/completion_context.rs b/crates/ra_ide/src/completion/completion_context.rs
index 9f4c582..560fb19 100644
--- a/crates/ra_ide/src/completion/completion_context.rs
+++ b/crates/ra_ide/src/completion/completion_context.rs
@@ -381,6 +381,7 @@
self.is_path_type = path.syntax().parent().and_then(ast::PathType::cast).is_some();
self.has_type_args = segment.type_arg_list().is_some();
+ #[allow(deprecated)]
if let Some(path) = hir::Path::from_ast(path.clone()) {
if let Some(path_prefix) = path.qualifier() {
self.path_prefix = Some(path_prefix);
diff --git a/crates/ra_parser/src/grammar/expressions.rs b/crates/ra_parser/src/grammar/expressions.rs
index d6e8df3..6e72eea 100644
--- a/crates/ra_parser/src/grammar/expressions.rs
+++ b/crates/ra_parser/src/grammar/expressions.rs
@@ -50,10 +50,8 @@
}
fn is_expr_stmt_attr_allowed(kind: SyntaxKind) -> bool {
- match kind {
- BIN_EXPR | RANGE_EXPR | IF_EXPR => false,
- _ => true,
- }
+ let forbid = matches!(kind, BIN_EXPR | RANGE_EXPR);
+ !forbid
}
pub(super) fn stmt(p: &mut Parser, with_semi: StmtWithSemi) {
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0009_attr_on_expr_not_allowed.rast b/crates/ra_syntax/test_data/parser/inline/err/0009_attr_on_expr_not_allowed.rast
index 0656fdf..4e3fa70 100644
--- a/crates/ra_syntax/test_data/parser/inline/err/0009_attr_on_expr_not_allowed.rast
+++ b/crates/ra_syntax/test_data/parser/inline/err/0009_attr_on_expr_not_allowed.rast
@@ -56,4 +56,3 @@
R_CURLY@46..47 "}"
WHITESPACE@47..48 "\n"
error 24..24: attributes are not allowed on BIN_EXPR
-error 44..44: attributes are not allowed on IF_EXPR
diff --git a/crates/test_utils/src/lib.rs b/crates/test_utils/src/lib.rs
index 2141bfc..981565c 100644
--- a/crates/test_utils/src/lib.rs
+++ b/crates/test_utils/src/lib.rs
@@ -10,17 +10,17 @@
pub mod mark;
use std::{
- fs,
+ env, fs,
path::{Path, PathBuf},
};
-pub use ra_cfg::CfgOptions;
+use serde_json::Value;
use stdx::split1;
+use text_size::{TextRange, TextSize};
+pub use ra_cfg::CfgOptions;
pub use relative_path::{RelativePath, RelativePathBuf};
pub use rustc_hash::FxHashMap;
-use serde_json::Value;
-use text_size::{TextRange, TextSize};
pub use difference::Changeset as __Changeset;
@@ -625,8 +625,6 @@
should_skip
}
-const REWRITE: bool = false;
-
/// Asserts that `expected` and `actual` strings are equal. If they differ only
/// in trailing or leading whitespace the test won't fail and
/// the contents of `actual` will be written to the file located at `path`.
@@ -642,7 +640,7 @@
fs::write(path, actual).unwrap();
return;
}
- if REWRITE {
+ if env::var("UPDATE_EXPECTATIONS").is_ok() {
println!("rewriting {}", pretty_path.display());
fs::write(path, actual).unwrap();
return;
diff --git a/docs/dev/README.md b/docs/dev/README.md
index 2e4a459..4cb5dfa 100644
--- a/docs/dev/README.md
+++ b/docs/dev/README.md
@@ -342,6 +342,12 @@
The purpose of inline tests is not to achieve full coverage by test cases, but to explain to the reader of the code what each particular `if` and `match` is responsible for.
If you are tempted to add a large inline test, it might be a good idea to leave only the simplest example in place, and move the test to a manual `parser/ok` test.
+To update test data, run with `UPDATE_EXPECTATIONS` variable:
+
+```bash
+env UPDATE_EXPECTATIONS=1 cargo qt
+```
+
# Logging
Logging is done by both rust-analyzer and VS Code, so it might be tricky to