Skip to content

Commit 3a6fe71

Browse files
committed
Ruby: use overlayChangedFiles extensional in discard predicates
1 parent 0f8db81 commit 3a6fe71

File tree

4 files changed

+33
-67
lines changed

4 files changed

+33
-67
lines changed

ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,6 @@ module QL {
6060
)
6161
}
6262

63-
/** Holds if `file` was extracted as part of the overlay database. */
64-
overlay[local]
65-
private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) }
66-
6763
/** Holds if `node` is in the `file` and is part of the overlay base database. */
6864
overlay[local]
6965
private predicate discardableAstNode(@file file, @ql_ast_node node) {
@@ -73,7 +69,9 @@ module QL {
7369
/** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */
7470
overlay[discard_entity]
7571
private predicate discardAstNode(@ql_ast_node node) {
76-
exists(@file file | discardableAstNode(file, node) and discardFile(file))
72+
exists(@file file, string path | files(file, path) |
73+
discardableAstNode(file, node) and overlayChangedFiles(path)
74+
)
7775
}
7876

7977
/** A class representing `add_expr` nodes. */
@@ -1354,10 +1352,6 @@ module Dbscheme {
13541352
)
13551353
}
13561354

1357-
/** Holds if `file` was extracted as part of the overlay database. */
1358-
overlay[local]
1359-
private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) }
1360-
13611355
/** Holds if `node` is in the `file` and is part of the overlay base database. */
13621356
overlay[local]
13631357
private predicate discardableAstNode(@file file, @dbscheme_ast_node node) {
@@ -1367,7 +1361,9 @@ module Dbscheme {
13671361
/** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */
13681362
overlay[discard_entity]
13691363
private predicate discardAstNode(@dbscheme_ast_node node) {
1370-
exists(@file file | discardableAstNode(file, node) and discardFile(file))
1364+
exists(@file file, string path | files(file, path) |
1365+
discardableAstNode(file, node) and overlayChangedFiles(path)
1366+
)
13711367
}
13721368

13731369
/** A class representing `annotName` tokens. */
@@ -1714,10 +1710,6 @@ module Blame {
17141710
)
17151711
}
17161712

1717-
/** Holds if `file` was extracted as part of the overlay database. */
1718-
overlay[local]
1719-
private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) }
1720-
17211713
/** Holds if `node` is in the `file` and is part of the overlay base database. */
17221714
overlay[local]
17231715
private predicate discardableAstNode(@file file, @blame_ast_node node) {
@@ -1727,7 +1719,9 @@ module Blame {
17271719
/** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */
17281720
overlay[discard_entity]
17291721
private predicate discardAstNode(@blame_ast_node node) {
1730-
exists(@file file | discardableAstNode(file, node) and discardFile(file))
1722+
exists(@file file, string path | files(file, path) |
1723+
discardableAstNode(file, node) and overlayChangedFiles(path)
1724+
)
17311725
}
17321726

17331727
/** A class representing `blame_entry` nodes. */
@@ -1851,10 +1845,6 @@ module JSON {
18511845
)
18521846
}
18531847

1854-
/** Holds if `file` was extracted as part of the overlay database. */
1855-
overlay[local]
1856-
private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) }
1857-
18581848
/** Holds if `node` is in the `file` and is part of the overlay base database. */
18591849
overlay[local]
18601850
private predicate discardableAstNode(@file file, @json_ast_node node) {
@@ -1864,7 +1854,9 @@ module JSON {
18641854
/** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */
18651855
overlay[discard_entity]
18661856
private predicate discardAstNode(@json_ast_node node) {
1867-
exists(@file file | discardableAstNode(file, node) and discardFile(file))
1857+
exists(@file file, string path | files(file, path) |
1858+
discardableAstNode(file, node) and overlayChangedFiles(path)
1859+
)
18681860
}
18691861

18701862
class UnderscoreValue extends @json_underscore_value, AstNode { }

ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,6 @@ module Ruby {
6060
)
6161
}
6262

63-
/** Holds if `file` was extracted as part of the overlay database. */
64-
overlay[local]
65-
private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) }
66-
6763
/** Holds if `node` is in the `file` and is part of the overlay base database. */
6864
overlay[local]
6965
private predicate discardableAstNode(@file file, @ruby_ast_node node) {
@@ -73,7 +69,9 @@ module Ruby {
7369
/** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */
7470
overlay[discard_entity]
7571
private predicate discardAstNode(@ruby_ast_node node) {
76-
exists(@file file | discardableAstNode(file, node) and discardFile(file))
72+
exists(@file file, string path | files(file, path) |
73+
discardableAstNode(file, node) and overlayChangedFiles(path)
74+
)
7775
}
7876

7977
class UnderscoreArg extends @ruby_underscore_arg, AstNode { }
@@ -2006,10 +2004,6 @@ module Erb {
20062004
)
20072005
}
20082006

2009-
/** Holds if `file` was extracted as part of the overlay database. */
2010-
overlay[local]
2011-
private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) }
2012-
20132007
/** Holds if `node` is in the `file` and is part of the overlay base database. */
20142008
overlay[local]
20152009
private predicate discardableAstNode(@file file, @erb_ast_node node) {
@@ -2019,7 +2013,9 @@ module Erb {
20192013
/** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */
20202014
overlay[discard_entity]
20212015
private predicate discardAstNode(@erb_ast_node node) {
2022-
exists(@file file | discardableAstNode(file, node) and discardFile(file))
2016+
exists(@file file, string path | files(file, path) |
2017+
discardableAstNode(file, node) and overlayChangedFiles(path)
2018+
)
20232019
}
20242020

20252021
/** A class representing `code` tokens. */

shared/tree-sitter-extractor/src/generator/mod.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,6 @@ pub fn generate(
104104
body.push(ql::TopLevel::Predicate(
105105
ql_gen::create_get_node_file_predicate(&ast_node_name, &node_location_table_name),
106106
));
107-
body.push(ql::TopLevel::Predicate(
108-
ql_gen::create_discard_file_predicate(),
109-
));
110107
body.push(ql::TopLevel::Predicate(
111108
ql_gen::create_discardable_ast_node_predicate(&ast_node_name),
112109
));

shared/tree-sitter-extractor/src/generator/ql_gen.rs

Lines changed: 15 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -318,34 +318,6 @@ pub fn create_get_node_file_predicate<'a>(
318318
}
319319
}
320320

321-
pub fn create_discard_file_predicate<'a>() -> ql::Predicate<'a> {
322-
ql::Predicate {
323-
name: "discardFile",
324-
qldoc: Some(String::from(
325-
"Holds if `file` was extracted as part of the overlay database.",
326-
)),
327-
overridden: false,
328-
is_private: true,
329-
is_final: false,
330-
overlay: Some(ql::OverlayAnnotation::Local),
331-
return_type: None,
332-
formal_parameters: vec![ql::FormalParameter {
333-
name: "file",
334-
param_type: ql::Type::At("file"),
335-
}],
336-
body: ql::Expression::And(vec![
337-
ql::Expression::Pred("isOverlay", vec![]),
338-
ql::Expression::Equals(
339-
Box::new(ql::Expression::Var("file")),
340-
Box::new(ql::Expression::Pred(
341-
"getNodeFile",
342-
vec![ql::Expression::Var("_")],
343-
)),
344-
),
345-
]),
346-
}
347-
}
348-
349321
pub fn create_discardable_ast_node_predicate(ast_node_name: &str) -> ql::Predicate {
350322
ql::Predicate {
351323
name: "discardableAstNode",
@@ -398,17 +370,26 @@ pub fn create_discard_ast_node_predicate(ast_node_name: &str) -> ql::Predicate {
398370
}],
399371
body: ql::Expression::Aggregate {
400372
name: "exists",
401-
vars: vec![ql::FormalParameter {
402-
name: "file",
403-
param_type: ql::Type::At("file"),
404-
}],
405-
range: None,
373+
vars: vec![
374+
ql::FormalParameter {
375+
name: "file",
376+
param_type: ql::Type::At("file"),
377+
},
378+
ql::FormalParameter {
379+
name: "path",
380+
param_type: ql::Type::String,
381+
},
382+
],
383+
range: Some(Box::new(ql::Expression::Pred(
384+
"files",
385+
vec![ql::Expression::Var("file"), ql::Expression::Var("path")],
386+
))),
406387
expr: Box::new(ql::Expression::And(vec![
407388
ql::Expression::Pred(
408389
"discardableAstNode",
409390
vec![ql::Expression::Var("file"), ql::Expression::Var("node")],
410391
),
411-
ql::Expression::Pred("discardFile", vec![ql::Expression::Var("file")]),
392+
ql::Expression::Pred("overlayChangedFiles", vec![ql::Expression::Var("path")]),
412393
])),
413394
second_expr: None,
414395
},

0 commit comments

Comments
 (0)