diff --git a/crates/red_knot_workspace/src/lint.rs b/crates/red_knot_workspace/src/lint.rs index 854e6210c9..72db387168 100644 --- a/crates/red_knot_workspace/src/lint.rs +++ b/crates/red_knot_workspace/src/lint.rs @@ -7,7 +7,7 @@ use red_knot_python_semantic::types::Type; use red_knot_python_semantic::{HasTy, ModuleName, SemanticModel}; use ruff_db::files::File; use ruff_db::parsed::{parsed_module, ParsedModule}; -use ruff_db::source::{line_index, source_text, SourceText}; +use ruff_db::source::{source_text, SourceText}; use ruff_python_ast as ast; use ruff_python_ast::visitor::{walk_expr, walk_stmt, Visitor}; use ruff_text_size::{Ranged, TextSize}; @@ -48,19 +48,6 @@ pub(crate) fn lint_syntax(db: &dyn Db, file_id: File) -> Vec { }; visitor.visit_body(&ast.body); diagnostics = visitor.diagnostics; - } else { - let path = file_id.path(db); - let line_index = line_index(db.upcast(), file_id); - diagnostics.extend(parsed.errors().iter().map(|err| { - let source_location = line_index.source_location(err.location.start(), source.as_str()); - format!( - "{}:{}:{}: {}", - path.as_str(), - source_location.row, - source_location.column, - err, - ) - })); } diagnostics diff --git a/crates/red_knot_workspace/src/workspace.rs b/crates/red_knot_workspace/src/workspace.rs index 22145e9e89..044e82e0fa 100644 --- a/crates/red_knot_workspace/src/workspace.rs +++ b/crates/red_knot_workspace/src/workspace.rs @@ -6,6 +6,7 @@ use salsa::{Durability, Setter as _}; pub use metadata::{PackageMetadata, WorkspaceMetadata}; use red_knot_python_semantic::types::check_types; use red_knot_python_semantic::SearchPathSettings; +use ruff_db::parsed::parsed_module; use ruff_db::source::{line_index, source_text, SourceDiagnostic}; use ruff_db::{ files::{system_path_to_file, File}, @@ -404,6 +405,17 @@ pub(super) fn check_file(db: &dyn Db, file: File) -> Vec { return diagnostics; } + let parsed = parsed_module(db.upcast(), file); + + if !parsed.errors().is_empty() { + let path = file.path(db); + let line_index = line_index(db.upcast(), file); + diagnostics.extend(parsed.errors().iter().map(|err| { + let source_location = line_index.source_location(err.location.start(), source.as_str()); + format!("{path}:{source_location}: {message}", message = err.error) + })); + } + for diagnostic in check_types(db.upcast(), file) { let index = line_index(db.upcast(), diagnostic.file()); let location = index.source_location(diagnostic.start(), source.as_str());