-
-
Notifications
You must be signed in to change notification settings - Fork 78
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add function_like_proc_macro_missing lint (#1021)
Addresses a checkbox in #946 --------- Co-authored-by: Predrag Gruevski <[email protected]>
- Loading branch information
1 parent
bcd001a
commit f0d7df7
Showing
7 changed files
with
120 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
SemverQuery( | ||
id: "function_like_proc_macro_missing", | ||
human_readable_name: "function-like proc macro removed", | ||
description: "A function-like procedural macro that previously existed has been removed.", | ||
required_update: Major, | ||
lint_level: Deny, | ||
reference_link: Some("https://doc.rust-lang.org/reference/procedural-macros.html#function-like-procedural-macros"), | ||
query: r#" | ||
{ | ||
CrateDiff { | ||
baseline { | ||
item { | ||
... on FunctionLikeProcMacro { | ||
macro_name: name @output @tag | ||
visibility_limit @filter(op: "=", value: ["$public"]) | ||
# Get span info from the baseline for error reporting | ||
span_: span @optional { | ||
filename @output | ||
begin_line @output | ||
} | ||
} | ||
} | ||
} | ||
current @fold @transform(op: "count") @filter(op: "=", value: ["$zero"]) { | ||
item { | ||
... on FunctionLikeProcMacro { | ||
name @filter(op: "=", value: ["%macro_name"]) | ||
} | ||
} | ||
} | ||
} | ||
}"#, | ||
arguments: { | ||
"public": "public", | ||
"zero": 0, | ||
}, | ||
error_message: "A function-like procedural macro has been removed. Any code that invokes this macro will fail to compile.", | ||
per_result_error_template: Some("macro {{macro_name}} in file {{span_filename}}:{{span_begin_line}}"), | ||
witness: None, | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
10 changes: 10 additions & 0 deletions
10
test_crates/function_like_proc_macro_missing/new/Cargo.toml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
[package] | ||
publish = false | ||
name = "function_like_proc_macro_missing" | ||
version = "0.1.0" | ||
edition = "2021" | ||
|
||
[lib] | ||
proc-macro = true | ||
|
||
[dependencies] |
20 changes: 20 additions & 0 deletions
20
test_crates/function_like_proc_macro_missing/new/src/lib.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
use proc_macro::TokenStream; | ||
|
||
// make_answer is removed | ||
|
||
// Keep this to verify we don't have false positives | ||
#[proc_macro] | ||
pub fn another_macro(_item: TokenStream) -> TokenStream { | ||
"fn other() -> u32 { 0 }".parse().unwrap() | ||
} | ||
|
||
// Keep other macro types to verify we don't detect their changes | ||
#[proc_macro_derive(MyDerive)] | ||
pub fn my_derive(_item: TokenStream) -> TokenStream { | ||
TokenStream::new() | ||
} | ||
|
||
#[proc_macro_attribute] | ||
pub fn my_attribute(_attr: TokenStream, _item: TokenStream) -> TokenStream { | ||
TokenStream::new() | ||
} |
10 changes: 10 additions & 0 deletions
10
test_crates/function_like_proc_macro_missing/old/Cargo.toml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
[package] | ||
publish = false | ||
name = "function_like_proc_macro_missing" | ||
version = "0.1.0" | ||
edition = "2021" | ||
|
||
[lib] | ||
proc-macro = true | ||
|
||
[dependencies] |
23 changes: 23 additions & 0 deletions
23
test_crates/function_like_proc_macro_missing/old/src/lib.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
use proc_macro::TokenStream; | ||
|
||
#[proc_macro] | ||
pub fn make_answer(_item: TokenStream) -> TokenStream { | ||
"fn answer() -> u32 { 42 }".parse().unwrap() | ||
} | ||
|
||
// Will keep this one to ensure we don't have false positives | ||
#[proc_macro] | ||
pub fn another_macro(_item: TokenStream) -> TokenStream { | ||
"fn other() -> u32 { 0 }".parse().unwrap() | ||
} | ||
|
||
// Other kinds of proc macros that should not trigger this lint | ||
#[proc_macro_derive(MyDerive)] | ||
pub fn my_derive(_item: TokenStream) -> TokenStream { | ||
TokenStream::new() | ||
} | ||
|
||
#[proc_macro_attribute] | ||
pub fn my_attribute(_attr: TokenStream, _item: TokenStream) -> TokenStream { | ||
TokenStream::new() | ||
} |
14 changes: 14 additions & 0 deletions
14
test_outputs/query_execution/function_like_proc_macro_missing.snap
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
--- | ||
source: src/query.rs | ||
expression: "&query_execution_results" | ||
snapshot_kind: text | ||
--- | ||
{ | ||
"./test_crates/function_like_proc_macro_missing/": [ | ||
{ | ||
"macro_name": String("make_answer"), | ||
"span_begin_line": Uint64(4), | ||
"span_filename": String("src/lib.rs"), | ||
}, | ||
], | ||
} |