4889: Deprecate hir::Path::from_ast r=matklad a=matklad



bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
bors[bot] 2020-06-15 09:02:53 +00:00 committed by GitHub
commit db6100dbaa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 17 additions and 13 deletions

View file

@ -106,6 +106,7 @@ impl<'a> SubstituteTypeParams<'a> {
_ => 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 @@ impl<'a> QualifyPaths<'a> {
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 {

View file

@ -154,7 +154,7 @@ pub enum GenericArg {
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())
}

View file

@ -381,6 +381,7 @@ impl<'a> CompletionContext<'a> {
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);

View file

@ -50,10 +50,8 @@ fn expr_no_struct(p: &mut Parser) {
}
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) {

View file

@ -56,4 +56,3 @@ SOURCE_FILE@0..48
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

View file

@ -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 @@ pub fn skip_slow_tests() -> bool {
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 @@ fn assert_equal_text(expected: &str, actual: &str, path: &Path) {
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;

View file

@ -342,6 +342,12 @@ There are two kinds of tests:
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