mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-11-02 12:59:12 +00:00
Merge pull request #18995 from alibektas/12210
fix: Lower range pattern bounds to expressions
This commit is contained in:
commit
622ef64f93
16 changed files with 187 additions and 117 deletions
|
|
@ -40,7 +40,7 @@ pub(crate) fn mismatched_arg_count(
|
|||
Diagnostic::new(
|
||||
DiagnosticCode::RustcHardError("E0107"),
|
||||
message,
|
||||
invalid_args_range(ctx, d.call_expr.map(AstPtr::wrap_left), d.expected, d.found),
|
||||
invalid_args_range(ctx, d.call_expr, d.expected, d.found),
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
use std::iter;
|
||||
|
||||
use either::Either;
|
||||
use hir::{db::ExpandDatabase, Adt, FileRange, HasSource, HirDisplay, InFile, Struct, Union};
|
||||
use ide_db::text_edit::TextEdit;
|
||||
use ide_db::{
|
||||
|
|
@ -41,7 +42,7 @@ pub(crate) fn unresolved_field(
|
|||
),
|
||||
adjusted_display_range(ctx, d.expr, &|expr| {
|
||||
Some(
|
||||
match expr {
|
||||
match expr.left()? {
|
||||
ast::Expr::MethodCallExpr(it) => it.name_ref(),
|
||||
ast::Expr::FieldExpr(it) => it.name_ref(),
|
||||
_ => None,
|
||||
|
|
@ -72,7 +73,7 @@ fn fixes(ctx: &DiagnosticsContext<'_>, d: &hir::UnresolvedField) -> Option<Vec<A
|
|||
fn field_fix(ctx: &DiagnosticsContext<'_>, d: &hir::UnresolvedField) -> Option<Assist> {
|
||||
// Get the FileRange of the invalid field access
|
||||
let root = ctx.sema.db.parse_or_expand(d.expr.file_id);
|
||||
let expr = d.expr.value.to_node(&root);
|
||||
let expr = d.expr.value.to_node(&root).left()?;
|
||||
|
||||
let error_range = ctx.sema.original_range_opt(expr.syntax())?;
|
||||
let field_name = d.name.as_str();
|
||||
|
|
@ -263,7 +264,7 @@ fn record_field_layout(
|
|||
// FIXME: We should fill out the call here, move the cursor and trigger signature help
|
||||
fn method_fix(
|
||||
ctx: &DiagnosticsContext<'_>,
|
||||
expr_ptr: &InFile<AstPtr<ast::Expr>>,
|
||||
expr_ptr: &InFile<AstPtr<Either<ast::Expr, ast::Pat>>>,
|
||||
) -> Option<Assist> {
|
||||
let root = ctx.sema.db.parse_or_expand(expr_ptr.file_id);
|
||||
let expr = expr_ptr.value.to_node(&root);
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ pub(crate) fn unresolved_method(
|
|||
),
|
||||
adjusted_display_range(ctx, d.expr, &|expr| {
|
||||
Some(
|
||||
match expr {
|
||||
match expr.left()? {
|
||||
ast::Expr::MethodCallExpr(it) => it.name_ref(),
|
||||
ast::Expr::FieldExpr(it) => it.name_ref(),
|
||||
_ => None,
|
||||
|
|
@ -85,7 +85,7 @@ fn field_fix(
|
|||
let expr_ptr = &d.expr;
|
||||
let root = ctx.sema.db.parse_or_expand(expr_ptr.file_id);
|
||||
let expr = expr_ptr.value.to_node(&root);
|
||||
let (file_id, range) = match expr {
|
||||
let (file_id, range) = match expr.left()? {
|
||||
ast::Expr::MethodCallExpr(mcall) => {
|
||||
let FileRange { range, file_id } =
|
||||
ctx.sema.original_range_opt(mcall.receiver()?.syntax())?;
|
||||
|
|
@ -117,7 +117,7 @@ fn assoc_func_fix(ctx: &DiagnosticsContext<'_>, d: &hir::UnresolvedMethodCall) -
|
|||
|
||||
let expr_ptr = &d.expr;
|
||||
let root = db.parse_or_expand(expr_ptr.file_id);
|
||||
let expr: ast::Expr = expr_ptr.value.to_node(&root);
|
||||
let expr: ast::Expr = expr_ptr.value.to_node(&root).left()?;
|
||||
|
||||
let call = ast::MethodCallExpr::cast(expr.syntax().clone())?;
|
||||
let range = InFile::new(expr_ptr.file_id, call.syntax().text_range())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue