Skip to content

Commit f543839

Browse files
author
Paolo Tranquilli
committed
Rust: enhance macro expansion testing
1 parent a99556e commit f543839

File tree

16 files changed

+349
-0
lines changed

16 files changed

+349
-0
lines changed

rust/ql/integration-tests/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
target/

rust/ql/integration-tests/macro-expansion/Cargo.lock

Lines changed: 53 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[workspace]
2+
members = ["macros"]
3+
resolver = "2"
4+
5+
[package]
6+
name = "macro_expansion"
7+
version = "0.1.0"
8+
edition = "2024"
9+
10+
[dependencies]
11+
macros = { path = "macros" }
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
{
2+
"attributes": {
3+
"durations": {
4+
"crateGraph": {
5+
"ms": "__REDACTED__",
6+
"pretty": "__REDACTED__"
7+
},
8+
"extract": {
9+
"ms": "__REDACTED__",
10+
"pretty": "__REDACTED__"
11+
},
12+
"findManifests": {
13+
"ms": "__REDACTED__",
14+
"pretty": "__REDACTED__"
15+
},
16+
"loadManifest": {
17+
"ms": "__REDACTED__",
18+
"pretty": "__REDACTED__"
19+
},
20+
"loadSource": {
21+
"ms": "__REDACTED__",
22+
"pretty": "__REDACTED__"
23+
},
24+
"parse": {
25+
"ms": "__REDACTED__",
26+
"pretty": "__REDACTED__"
27+
},
28+
"total": {
29+
"ms": "__REDACTED__",
30+
"pretty": "__REDACTED__"
31+
}
32+
},
33+
"numberOfFiles": 3,
34+
"numberOfManifests": 1
35+
},
36+
"severity": "note",
37+
"source": {
38+
"extractorName": "rust",
39+
"id": "rust/extractor/telemetry",
40+
"name": "telemetry"
41+
},
42+
"visibility": {
43+
"cliSummaryTable": false,
44+
"statusPage": false,
45+
"telemetry": true
46+
}
47+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[package]
2+
name = "macros"
3+
version = "0.1.0"
4+
edition = "2024"
5+
6+
[lib]
7+
proc-macro = true
8+
9+
[dependencies]
10+
quote = "1.0.40"
11+
syn = { version = "2.0.100", features = ["full"] }
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
use proc_macro::TokenStream;
2+
use quote::quote;
3+
4+
#[proc_macro_attribute]
5+
pub fn repeat(attr: TokenStream, item: TokenStream) -> TokenStream {
6+
let number = syn::parse_macro_input!(attr as syn::LitInt).base10_parse::<usize>().unwrap();
7+
let ast = syn::parse_macro_input!(item as syn::ItemFn);
8+
let items = (0..number)
9+
.map(|i| {
10+
let mut new_ast = ast.clone();
11+
new_ast.sig.ident = syn::Ident::new(&format!("{}_{}", ast.sig.ident, i), ast.sig.ident.span());
12+
new_ast
13+
})
14+
.collect::<Vec<_>>();
15+
quote! {
16+
#(#items)*
17+
}.into()
18+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
macros/src/lib.rs
2+
src/lib.rs
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
use macros::repeat;
2+
3+
#[repeat(3)]
4+
fn foo() {}
5+
6+
#[repeat(2)]
7+
#[repeat(3)]
8+
fn bar() {}
9+
10+
#[repeat(0)]
11+
fn baz() {}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
| src/lib.rs:3:1:4:11 | fn foo | 0 | src/lib.rs:4:1:4:10 | fn foo_0 |
2+
| src/lib.rs:3:1:4:11 | fn foo | 1 | src/lib.rs:4:1:4:10 | fn foo_1 |
3+
| src/lib.rs:3:1:4:11 | fn foo | 2 | src/lib.rs:4:1:4:10 | fn foo_2 |
4+
| src/lib.rs:6:1:8:11 | fn bar | 0 | src/lib.rs:7:1:8:10 | fn bar_0 |
5+
| src/lib.rs:6:1:8:11 | fn bar | 1 | src/lib.rs:7:1:8:10 | fn bar_1 |
6+
| src/lib.rs:7:1:8:10 | fn bar_0 | 0 | src/lib.rs:8:1:8:10 | fn bar_0_0 |
7+
| src/lib.rs:7:1:8:10 | fn bar_0 | 1 | src/lib.rs:8:1:8:10 | fn bar_0_1 |
8+
| src/lib.rs:7:1:8:10 | fn bar_0 | 2 | src/lib.rs:8:1:8:10 | fn bar_0_2 |
9+
| src/lib.rs:7:1:8:10 | fn bar_1 | 0 | src/lib.rs:8:1:8:10 | fn bar_1_0 |
10+
| src/lib.rs:7:1:8:10 | fn bar_1 | 1 | src/lib.rs:8:1:8:10 | fn bar_1_1 |
11+
| src/lib.rs:7:1:8:10 | fn bar_1 | 2 | src/lib.rs:8:1:8:10 | fn bar_1_2 |
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import rust
2+
3+
from Item i, MacroItems items, int index, Item expanded
4+
where i.getAttributeMacroExpansion() = items and items.getItem(index) = expanded
5+
select i, index, expanded

0 commit comments

Comments
 (0)