Skip to content

Commit 8b5603c

Browse files
authored
Merge pull request #20160 from geoffw0/exec
Rust: Add type inference test cases resembling missing call targets in SQLx.
2 parents 6925d4e + 2ec6daf commit 8b5603c

File tree

2 files changed

+85
-5
lines changed

2 files changed

+85
-5
lines changed

rust/ql/test/library-tests/type-inference/main.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2484,6 +2484,45 @@ pub mod pattern_matching_experimental {
24842484
}
24852485
}
24862486

2487+
pub mod exec {
2488+
// a *greatly* simplified model of `MySqlConnection.execute` in SQLX
2489+
2490+
trait Connection {
2491+
}
2492+
2493+
trait Executor {
2494+
fn execute1(&self);
2495+
fn execute2<E>(&self, query: E);
2496+
}
2497+
2498+
impl<T: Connection> Executor for T {
2499+
fn execute1(&self) {
2500+
println!("Executor::execute1");
2501+
}
2502+
2503+
fn execute2<E>(&self, _query: E) {
2504+
println!("Executor::execute2");
2505+
}
2506+
}
2507+
2508+
struct MySqlConnection {}
2509+
2510+
impl Connection for MySqlConnection {}
2511+
2512+
pub fn f() {
2513+
let c = MySqlConnection {}; // $ type=c:MySqlConnection
2514+
2515+
c.execute1(); // $ MISSING: target=execute1
2516+
MySqlConnection::execute1(&c); // $ MISSING: target=execute1
2517+
2518+
c.execute2("SELECT * FROM users"); // $ MISSING: target=execute2
2519+
c.execute2::<&str>("SELECT * FROM users"); // $ MISSING: target=execute2
2520+
MySqlConnection::execute2(&c, "SELECT * FROM users"); // $ MISSING: target=execute2
2521+
MySqlConnection::execute2::<&str>(&c, "SELECT * FROM users"); // $ MISSING: target=execute2
2522+
2523+
}
2524+
}
2525+
24872526
mod closure;
24882527
mod dereference;
24892528
mod dyn_type;
@@ -2515,6 +2554,7 @@ fn main() {
25152554
macros::f(); // $ target=f
25162555
method_determined_by_argument_type::f(); // $ target=f
25172556
tuples::f(); // $ target=f
2557+
exec::f(); // $ target=f
25182558
dereference::test(); // $ target=test
25192559
pattern_matching::test_all_patterns(); // $ target=test_all_patterns
25202560
pattern_matching_experimental::box_patterns(); // $ target=box_patterns

rust/ql/test/library-tests/type-inference/type-inference.expected

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4840,11 +4840,51 @@ inferType
48404840
| main.rs:2481:26:2481:43 | "Nested boxed: {}\\n" | &T | {EXTERNAL LOCATION} | str |
48414841
| main.rs:2481:26:2481:59 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments |
48424842
| main.rs:2481:26:2481:59 | MacroExpr | | {EXTERNAL LOCATION} | Arguments |
4843-
| main.rs:2493:5:2493:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo |
4844-
| main.rs:2494:5:2494:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo |
4845-
| main.rs:2494:20:2494:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
4846-
| main.rs:2494:41:2494:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
4847-
| main.rs:2510:5:2510:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future |
4843+
| main.rs:2494:21:2494:25 | SelfParam | | file://:0:0:0:0 | & |
4844+
| main.rs:2494:21:2494:25 | SelfParam | &T | main.rs:2493:5:2496:5 | Self [trait Executor] |
4845+
| main.rs:2495:24:2495:28 | SelfParam | | file://:0:0:0:0 | & |
4846+
| main.rs:2495:24:2495:28 | SelfParam | &T | main.rs:2493:5:2496:5 | Self [trait Executor] |
4847+
| main.rs:2495:31:2495:35 | query | | main.rs:2495:21:2495:21 | E |
4848+
| main.rs:2499:21:2499:25 | SelfParam | | file://:0:0:0:0 | & |
4849+
| main.rs:2499:21:2499:25 | SelfParam | &T | main.rs:2498:10:2498:22 | T |
4850+
| main.rs:2500:22:2500:41 | "Executor::execute1\\n" | | file://:0:0:0:0 | & |
4851+
| main.rs:2500:22:2500:41 | "Executor::execute1\\n" | &T | {EXTERNAL LOCATION} | str |
4852+
| main.rs:2500:22:2500:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments |
4853+
| main.rs:2500:22:2500:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments |
4854+
| main.rs:2503:24:2503:28 | SelfParam | | file://:0:0:0:0 | & |
4855+
| main.rs:2503:24:2503:28 | SelfParam | &T | main.rs:2498:10:2498:22 | T |
4856+
| main.rs:2503:31:2503:36 | _query | | main.rs:2503:21:2503:21 | E |
4857+
| main.rs:2504:22:2504:41 | "Executor::execute2\\n" | | file://:0:0:0:0 | & |
4858+
| main.rs:2504:22:2504:41 | "Executor::execute2\\n" | &T | {EXTERNAL LOCATION} | str |
4859+
| main.rs:2504:22:2504:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments |
4860+
| main.rs:2504:22:2504:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments |
4861+
| main.rs:2513:13:2513:13 | c | | main.rs:2508:5:2508:29 | MySqlConnection |
4862+
| main.rs:2513:17:2513:34 | MySqlConnection {...} | | main.rs:2508:5:2508:29 | MySqlConnection |
4863+
| main.rs:2515:9:2515:9 | c | | main.rs:2508:5:2508:29 | MySqlConnection |
4864+
| main.rs:2516:35:2516:36 | &c | | file://:0:0:0:0 | & |
4865+
| main.rs:2516:35:2516:36 | &c | &T | main.rs:2508:5:2508:29 | MySqlConnection |
4866+
| main.rs:2516:36:2516:36 | c | | main.rs:2508:5:2508:29 | MySqlConnection |
4867+
| main.rs:2518:9:2518:9 | c | | main.rs:2508:5:2508:29 | MySqlConnection |
4868+
| main.rs:2518:20:2518:40 | "SELECT * FROM users" | | file://:0:0:0:0 | & |
4869+
| main.rs:2518:20:2518:40 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str |
4870+
| main.rs:2519:9:2519:9 | c | | main.rs:2508:5:2508:29 | MySqlConnection |
4871+
| main.rs:2519:28:2519:48 | "SELECT * FROM users" | | file://:0:0:0:0 | & |
4872+
| main.rs:2519:28:2519:48 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str |
4873+
| main.rs:2520:35:2520:36 | &c | | file://:0:0:0:0 | & |
4874+
| main.rs:2520:35:2520:36 | &c | &T | main.rs:2508:5:2508:29 | MySqlConnection |
4875+
| main.rs:2520:36:2520:36 | c | | main.rs:2508:5:2508:29 | MySqlConnection |
4876+
| main.rs:2520:39:2520:59 | "SELECT * FROM users" | | file://:0:0:0:0 | & |
4877+
| main.rs:2520:39:2520:59 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str |
4878+
| main.rs:2521:43:2521:44 | &c | | file://:0:0:0:0 | & |
4879+
| main.rs:2521:43:2521:44 | &c | &T | main.rs:2508:5:2508:29 | MySqlConnection |
4880+
| main.rs:2521:44:2521:44 | c | | main.rs:2508:5:2508:29 | MySqlConnection |
4881+
| main.rs:2521:47:2521:67 | "SELECT * FROM users" | | file://:0:0:0:0 | & |
4882+
| main.rs:2521:47:2521:67 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str |
4883+
| main.rs:2532:5:2532:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo |
4884+
| main.rs:2533:5:2533:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo |
4885+
| main.rs:2533:20:2533:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
4886+
| main.rs:2533:41:2533:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
4887+
| main.rs:2549:5:2549:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future |
48484888
| pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option |
48494889
| pattern_matching.rs:13:26:133:1 | { ... } | T | file://:0:0:0:0 | () |
48504890
| pattern_matching.rs:14:9:14:13 | value | | {EXTERNAL LOCATION} | Option |

0 commit comments

Comments
 (0)