mirror of https://github.com/mtshiba/pylyzer
Downgrade to a warn for cmp objs with no `__eq__`
This commit is contained in:
parent
30d1e32aea
commit
da8ebcaf43
|
|
@ -253,7 +253,7 @@ checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
|
|||
[[package]]
|
||||
name = "els"
|
||||
version = "0.1.18"
|
||||
source = "git+https://github.com/erg-lang/erg?branch=main#f604338d996fdee827c51386e23b26b6c0159389"
|
||||
source = "git+https://github.com/erg-lang/erg?branch=main#f86a4498465aa8a5a0068dfb4a235596f9da462b"
|
||||
dependencies = [
|
||||
"erg_common",
|
||||
"erg_compiler",
|
||||
|
|
@ -274,7 +274,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "erg_common"
|
||||
version = "0.6.6"
|
||||
source = "git+https://github.com/erg-lang/erg?branch=main#f604338d996fdee827c51386e23b26b6c0159389"
|
||||
source = "git+https://github.com/erg-lang/erg?branch=main#f86a4498465aa8a5a0068dfb4a235596f9da462b"
|
||||
dependencies = [
|
||||
"backtrace-on-stack-overflow",
|
||||
"hermit-abi",
|
||||
|
|
@ -285,7 +285,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "erg_compiler"
|
||||
version = "0.6.6"
|
||||
source = "git+https://github.com/erg-lang/erg?branch=main#f604338d996fdee827c51386e23b26b6c0159389"
|
||||
source = "git+https://github.com/erg-lang/erg?branch=main#f86a4498465aa8a5a0068dfb4a235596f9da462b"
|
||||
dependencies = [
|
||||
"erg_common",
|
||||
"erg_parser",
|
||||
|
|
@ -294,7 +294,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "erg_parser"
|
||||
version = "0.6.6"
|
||||
source = "git+https://github.com/erg-lang/erg?branch=main#f604338d996fdee827c51386e23b26b6c0159389"
|
||||
source = "git+https://github.com/erg-lang/erg?branch=main#f86a4498465aa8a5a0068dfb4a235596f9da462b"
|
||||
dependencies = [
|
||||
"erg_common",
|
||||
"unicode-xid 0.2.4",
|
||||
|
|
|
|||
|
|
@ -125,8 +125,11 @@ impl PythonAnalyzer {
|
|||
Err(iart) => {
|
||||
errors.extend(iart.errors);
|
||||
let errors = handle_err::filter_errors(self.checker.get_mod_ctx(), errors);
|
||||
let (errors, _warns) =
|
||||
handle_err::downgrade_errors(self.checker.get_mod_ctx(), errors);
|
||||
warns.extend(iart.warns);
|
||||
let warns = handle_err::filter_errors(self.checker.get_mod_ctx(), warns);
|
||||
let mut warns = handle_err::filter_errors(self.checker.get_mod_ctx(), warns);
|
||||
warns.extend(_warns);
|
||||
Err(IncompleteArtifact::new(iart.object, errors, warns))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,18 @@
|
|||
use erg_common::error::ErrorKind;
|
||||
use erg_common::log;
|
||||
use erg_common::traits::Stream;
|
||||
use erg_common::Str;
|
||||
// use erg_common::style::{remove_style, StyledString, Color};
|
||||
use erg_compiler::context::ModuleContext;
|
||||
use erg_compiler::error::{CompileError, CompileErrors};
|
||||
use erg_compiler::error::{CompileError, CompileErrors, CompileWarning, CompileWarnings};
|
||||
|
||||
pub fn default_implementations(op: &str) -> Option<&str> {
|
||||
match op {
|
||||
"`==`" => Some("__eq__"),
|
||||
"`!=`" => Some("__ne__"),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn filter_errors(ctx: &ModuleContext, errors: CompileErrors) -> CompileErrors {
|
||||
errors
|
||||
|
|
@ -35,3 +45,48 @@ fn filter_error(_ctx: &ModuleContext, error: CompileError) -> Option<CompileErro
|
|||
_ => Some(error),
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn downgrade_errors(
|
||||
ctx: &ModuleContext,
|
||||
errors: CompileErrors,
|
||||
) -> (CompileErrors, CompileWarnings) {
|
||||
let mut errs = CompileErrors::empty();
|
||||
let mut warns = CompileWarnings::empty();
|
||||
for error in errors {
|
||||
match downgrade_error(ctx, error) {
|
||||
Ok(err) => errs.push(err),
|
||||
Err(warn) => warns.push(warn),
|
||||
}
|
||||
}
|
||||
(errs, warns)
|
||||
}
|
||||
|
||||
#[allow(clippy::result_large_err)]
|
||||
fn downgrade_error(
|
||||
_ctx: &ModuleContext,
|
||||
mut error: CompileError,
|
||||
) -> Result<CompileError, CompileWarning> {
|
||||
match error.core.kind {
|
||||
ErrorKind::TypeError => {
|
||||
// TODO: trim escape sequences
|
||||
let callee = Str::rc(
|
||||
error
|
||||
.core
|
||||
.main_message
|
||||
.trim_start_matches("the type of ")
|
||||
.trim_end_matches(" is mismatched"),
|
||||
);
|
||||
if let Some(op) = callee.find_sub(&["`==`", "`!=`"]) {
|
||||
error.core.main_message = format!(
|
||||
"this object does not implement `{}`",
|
||||
default_implementations(op).unwrap()
|
||||
);
|
||||
error.core.kind = ErrorKind::TypeWarning;
|
||||
Err(error)
|
||||
} else {
|
||||
Ok(error)
|
||||
}
|
||||
}
|
||||
_ => Ok(error),
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue