mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-01 14:21:53 +00:00
Avoid displaying syntax error as log message (#11902)
## Summary Follow-up to #11901 This PR avoids displaying the syntax errors as log message now that the `E999` diagnostic cannot be disabled. For context on why this was added, refer to https://github.com/astral-sh/ruff/pull/2505. Basically, we would allow ignoring the syntax error diagnostic because certain syntax feature weren't supported back then like `match` statement. And, if a user ignored `E999`, Ruff would give no feedback if the source code contained any syntax error. So, this log message was a way to indicate to the user even if `E999` was disabled. The current state of the parser is such that (a) it matches with the latest grammar and (b) it's easy to add support for any new syntax. **Note:** This PR doesn't remove the `DisplayParseError` struct because it's still being used by the formatter. ## Test Plan Update existing snapshots from the integration tests.
This commit is contained in:
parent
e7b49694a7
commit
73851e73ab
3 changed files with 60 additions and 101 deletions
|
@ -9,13 +9,12 @@ use std::path::Path;
|
||||||
|
|
||||||
use anyhow::{Context, Result};
|
use anyhow::{Context, Result};
|
||||||
use colored::Colorize;
|
use colored::Colorize;
|
||||||
use log::{debug, error, warn};
|
use log::{debug, warn};
|
||||||
use ruff_linter::codes::Rule;
|
|
||||||
use rustc_hash::FxHashMap;
|
use rustc_hash::FxHashMap;
|
||||||
|
|
||||||
use ruff_diagnostics::Diagnostic;
|
use ruff_diagnostics::Diagnostic;
|
||||||
|
use ruff_linter::codes::Rule;
|
||||||
use ruff_linter::linter::{lint_fix, lint_only, FixTable, FixerResult, LinterResult, ParseSource};
|
use ruff_linter::linter::{lint_fix, lint_only, FixTable, FixerResult, LinterResult, ParseSource};
|
||||||
use ruff_linter::logging::DisplayParseError;
|
|
||||||
use ruff_linter::message::{Message, SyntaxErrorMessage};
|
use ruff_linter::message::{Message, SyntaxErrorMessage};
|
||||||
use ruff_linter::pyproject_toml::lint_pyproject_toml;
|
use ruff_linter::pyproject_toml::lint_pyproject_toml;
|
||||||
use ruff_linter::settings::types::UnsafeFixes;
|
use ruff_linter::settings::types::UnsafeFixes;
|
||||||
|
@ -357,13 +356,6 @@ pub(crate) fn lint_path(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(error) = parse_error {
|
|
||||||
error!(
|
|
||||||
"{}",
|
|
||||||
DisplayParseError::from_source_kind(error, Some(path.to_path_buf()), &transformed)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
let notebook_indexes = if let SourceKind::IpyNotebook(notebook) = transformed {
|
let notebook_indexes = if let SourceKind::IpyNotebook(notebook) = transformed {
|
||||||
FxHashMap::from_iter([(path.to_string_lossy().to_string(), notebook.into_index())])
|
FxHashMap::from_iter([(path.to_string_lossy().to_string(), notebook.into_index())])
|
||||||
} else {
|
} else {
|
||||||
|
@ -408,14 +400,8 @@ pub(crate) fn lint_stdin(
|
||||||
};
|
};
|
||||||
|
|
||||||
// Lint the inputs.
|
// Lint the inputs.
|
||||||
let (
|
let (LinterResult { data: messages, .. }, transformed, fixed) =
|
||||||
LinterResult {
|
if matches!(fix_mode, flags::FixMode::Apply | flags::FixMode::Diff) {
|
||||||
data: messages,
|
|
||||||
error: parse_error,
|
|
||||||
},
|
|
||||||
transformed,
|
|
||||||
fixed,
|
|
||||||
) = if matches!(fix_mode, flags::FixMode::Apply | flags::FixMode::Diff) {
|
|
||||||
if let Ok(FixerResult {
|
if let Ok(FixerResult {
|
||||||
result,
|
result,
|
||||||
transformed,
|
transformed,
|
||||||
|
@ -488,13 +474,6 @@ pub(crate) fn lint_stdin(
|
||||||
(result, transformed, fixed)
|
(result, transformed, fixed)
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some(error) = parse_error {
|
|
||||||
error!(
|
|
||||||
"{}",
|
|
||||||
DisplayParseError::from_source_kind(error, path.map(Path::to_path_buf), &transformed)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
let notebook_indexes = if let SourceKind::IpyNotebook(notebook) = transformed {
|
let notebook_indexes = if let SourceKind::IpyNotebook(notebook) = transformed {
|
||||||
FxHashMap::from_iter([(
|
FxHashMap::from_iter([(
|
||||||
path.map_or_else(|| "-".into(), |path| path.to_string_lossy().to_string()),
|
path.map_or_else(|| "-".into(), |path| path.to_string_lossy().to_string()),
|
||||||
|
|
|
@ -807,7 +807,6 @@ fn stdin_parse_error() {
|
||||||
Found 1 error.
|
Found 1 error.
|
||||||
|
|
||||||
----- stderr -----
|
----- stderr -----
|
||||||
error: Failed to parse at 1:16: Expected one or more symbol names after import
|
|
||||||
"###);
|
"###);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -836,7 +835,6 @@ fn stdin_multiple_parse_error() {
|
||||||
Found 2 errors.
|
Found 2 errors.
|
||||||
|
|
||||||
----- stderr -----
|
----- stderr -----
|
||||||
error: Failed to parse at 1:16: Expected one or more symbol names after import
|
|
||||||
"###);
|
"###);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -858,7 +856,6 @@ fn parse_error_not_included() {
|
||||||
Found 1 error.
|
Found 1 error.
|
||||||
|
|
||||||
----- stderr -----
|
----- stderr -----
|
||||||
error: Failed to parse at 1:6: Expected an expression
|
|
||||||
"###);
|
"###);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -880,7 +877,6 @@ fn deprecated_parse_error_selection() {
|
||||||
|
|
||||||
----- stderr -----
|
----- stderr -----
|
||||||
warning: Rule `E999` is deprecated and will be removed in a future release. Syntax errors will always be shown regardless of whether this rule is selected or not.
|
warning: Rule `E999` is deprecated and will be removed in a future release. Syntax errors will always be shown regardless of whether this rule is selected or not.
|
||||||
error: Failed to parse at 1:6: Expected an expression
|
|
||||||
"###);
|
"###);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ use std::path::Path;
|
||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, Result};
|
||||||
use colored::Colorize;
|
use colored::Colorize;
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use log::error;
|
|
||||||
use rustc_hash::FxHashMap;
|
use rustc_hash::FxHashMap;
|
||||||
|
|
||||||
use ruff_diagnostics::Diagnostic;
|
use ruff_diagnostics::Diagnostic;
|
||||||
|
@ -26,7 +25,6 @@ use crate::checkers::tokens::check_tokens;
|
||||||
use crate::directives::Directives;
|
use crate::directives::Directives;
|
||||||
use crate::doc_lines::{doc_lines_from_ast, doc_lines_from_tokens};
|
use crate::doc_lines::{doc_lines_from_ast, doc_lines_from_tokens};
|
||||||
use crate::fix::{fix_file, FixResult};
|
use crate::fix::{fix_file, FixResult};
|
||||||
use crate::logging::DisplayParseError;
|
|
||||||
use crate::message::Message;
|
use crate::message::Message;
|
||||||
use crate::noqa::add_noqa;
|
use crate::noqa::add_noqa;
|
||||||
use crate::registry::{AsRule, Rule, RuleSet};
|
use crate::registry::{AsRule, Rule, RuleSet};
|
||||||
|
@ -354,8 +352,7 @@ pub fn add_noqa_to_path(
|
||||||
|
|
||||||
// Generate diagnostics, ignoring any existing `noqa` directives.
|
// Generate diagnostics, ignoring any existing `noqa` directives.
|
||||||
let LinterResult {
|
let LinterResult {
|
||||||
data: diagnostics,
|
data: diagnostics, ..
|
||||||
error,
|
|
||||||
} = check_path(
|
} = check_path(
|
||||||
path,
|
path,
|
||||||
package,
|
package,
|
||||||
|
@ -370,19 +367,6 @@ pub fn add_noqa_to_path(
|
||||||
&parsed,
|
&parsed,
|
||||||
);
|
);
|
||||||
|
|
||||||
// Log any parse errors.
|
|
||||||
if let Some(error) = error {
|
|
||||||
error!(
|
|
||||||
"{}",
|
|
||||||
DisplayParseError::from_source_code(
|
|
||||||
error,
|
|
||||||
Some(path.to_path_buf()),
|
|
||||||
&locator.to_source_code(),
|
|
||||||
source_kind,
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add any missing `# noqa` pragmas.
|
// Add any missing `# noqa` pragmas.
|
||||||
// TODO(dhruvmanila): Add support for Jupyter Notebooks
|
// TODO(dhruvmanila): Add support for Jupyter Notebooks
|
||||||
add_noqa(
|
add_noqa(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue