diff --git a/samples/file.rs b/samples/file.rs deleted file mode 100644 index 8b137891..00000000 --- a/samples/file.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/samples/rust-sample/.gitignore b/samples/rust-sample/.gitignore new file mode 100644 index 00000000..ea8c4bf7 --- /dev/null +++ b/samples/rust-sample/.gitignore @@ -0,0 +1 @@ +/target diff --git a/samples/rust-sample/Cargo.lock b/samples/rust-sample/Cargo.lock new file mode 100644 index 00000000..debe49a8 --- /dev/null +++ b/samples/rust-sample/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "rust-sample" +version = "0.1.0" diff --git a/samples/rust-sample/Cargo.toml b/samples/rust-sample/Cargo.toml new file mode 100644 index 00000000..4e680135 --- /dev/null +++ b/samples/rust-sample/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "rust-sample" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/samples/rust-sample/src/main.rs b/samples/rust-sample/src/main.rs new file mode 100644 index 00000000..c4b800ff --- /dev/null +++ b/samples/rust-sample/src/main.rs @@ -0,0 +1,6 @@ +pub mod other_file; + +fn main() { + println!("Hello, {}!", "world"); + other_file::do_thing(); +} diff --git a/samples/rust-sample/src/other_file.rs b/samples/rust-sample/src/other_file.rs new file mode 100644 index 00000000..e1c6720c --- /dev/null +++ b/samples/rust-sample/src/other_file.rs @@ -0,0 +1,3 @@ +pub fn do_thing() { + println!("Hello, {}!", "world"); +} \ No newline at end of file diff --git a/src/linters/cargo-clippy.ts b/src/linters/cargo-clippy.ts index 170de612..8f35ad0c 100644 --- a/src/linters/cargo-clippy.ts +++ b/src/linters/cargo-clippy.ts @@ -15,9 +15,6 @@ import { debug } from "../helpers/debug"; type ClippyEntry = { reason: string; message: ClippyMessage; - target?: { - src_path: string; - }; }; type ClippyMessageChildren = { @@ -42,6 +39,7 @@ type ClippySpan = { column_end: number; line_start: number; line_end: number; + file_name: string; suggested_replacement?: string; }; @@ -69,8 +67,6 @@ export const getOffenses: LinterGetOffensesFunction = ({ stdout, uri }) => { const offenses: LinterOffense[] = []; entries.forEach((entry: ClippyEntry) => { - const src = "file://" + (entry.target?.src_path ?? ""); - if (entry.reason !== "compiler-message") { debug("unexpected reason:", entry.reason); return; @@ -81,11 +77,6 @@ export const getOffenses: LinterGetOffensesFunction = ({ stdout, uri }) => { return; } - if (src !== uri.toString()) { - debug("offense is for another file", { src, uri: uri.toString() }); - return; - } - const help = entry.message.children?.find( (child) => child.level === "help" && @@ -104,8 +95,14 @@ export const getOffenses: LinterGetOffensesFunction = ({ stdout, uri }) => { line_end: lineEnd, column_start: columnStart, column_end: columnEnd, + file_name: fileName, } = span; + if (!uri.toString().endsWith(span.file_name.replace('\\', "/"))) { + debug("span is for another file", { span_file_name: span.file_name, current_document: uri.toString() }); + return; + } + let replacement = ""; const range = {