Skip to content

Commit f49ebeb

Browse files
jketemaCopilot
andcommitted
JS: Recognize Workflow SDK 'use workflow' and 'use step' directives
Fixes #22701 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 4841ad5 commit f49ebeb

6 files changed

Lines changed: 41 additions & 5 deletions

File tree

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* The Workflow SDK directives `"use workflow"` and `"use step"` are now recognized as known directives, so the `js/unknown-directive` query no longer flags them.

‎javascript/ql/lib/semmle/javascript/Stmt.qll‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,32 @@ module Directive {
490490
class WorkletDirective extends KnownDirective {
491491
WorkletDirective() { this.getDirectiveText() = "worklet" }
492492
}
493+
494+
/**
495+
* A Workflow SDK `use workflow` directive.
496+
*
497+
* Example:
498+
*
499+
* ```
500+
* "use workflow";
501+
* ```
502+
*/
503+
class UseWorkflowDirective extends KnownDirective {
504+
UseWorkflowDirective() { this.getDirectiveText() = "use workflow" }
505+
}
506+
507+
/**
508+
* A Workflow SDK `use step` directive.
509+
*
510+
* Example:
511+
*
512+
* ```
513+
* "use step";
514+
* ```
515+
*/
516+
class UseStepDirective extends KnownDirective {
517+
UseStepDirective() { this.getDirectiveText() = "use step" }
518+
}
493519
}
494520

495521
/**

‎javascript/ql/test/library-tests/Directives/KnownDirective.expected‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,6 @@
1919
| tst.js:27:3:27:14 | 'use cache'; | use cache |
2020
| tst.js:28:3:28:22 | 'use cache: remote'; | use cache: remote |
2121
| tst.js:29:3:29:23 | 'use ca ... ivate'; | use cache: private |
22-
| tst.js:36:5:36:17 | 'use strict'; | use strict |
22+
| tst.js:30:3:30:17 | 'use workflow'; | use workflow |
23+
| tst.js:31:3:31:13 | 'use step'; | use step |
24+
| tst.js:38:5:38:17 | 'use strict'; | use strict |

‎javascript/ql/test/library-tests/Directives/tst.js‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ function f() {
2727
'use cache';
2828
'use cache: remote';
2929
'use cache: private';
30+
'use workflow';
31+
'use step';
3032
;
3133
'use strict'; // but this isn't a directive
3234
}

‎javascript/ql/test/query-tests/Expressions/UnknownDirective/UnknownDirective.expected‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
| UnknownDirective.js:12:5:12:17 | "use struct;" | Unknown directive: 'use struct;'. |
1212
| UnknownDirective.js:13:5:13:17 | "Use Strict"; | Unknown directive: 'Use Strict'. |
1313
| UnknownDirective.js:14:5:14:14 | "use bar"; | Unknown directive: 'use bar'. |
14-
| UnknownDirective.js:43:5:43:17 | "[0, 0, 0];"; | Unknown directive: '[0, 0, 0];'. |
15-
| UnknownDirective.js:44:5:44:65 | "[0, 0, ... , 0];"; | Unknown directive: '[0, 0, 0, 0, 0, 0, 0 ... (truncated)'. |
16-
| UnknownDirective.js:50:5:50:15 | ":nomunge"; | Unknown directive: ':nomunge'. |
17-
| UnknownDirective.js:51:5:51:30 | "foo(), ... munge"; | Unknown directive: 'foo(), bar, baz:nomu ... (truncated)'. |
14+
| UnknownDirective.js:45:5:45:17 | "[0, 0, 0];"; | Unknown directive: '[0, 0, 0];'. |
15+
| UnknownDirective.js:46:5:46:65 | "[0, 0, ... , 0];"; | Unknown directive: '[0, 0, 0, 0, 0, 0, 0 ... (truncated)'. |
16+
| UnknownDirective.js:52:5:52:15 | ":nomunge"; | Unknown directive: ':nomunge'. |
17+
| UnknownDirective.js:53:5:53:30 | "foo(), ... munge"; | Unknown directive: 'foo(), bar, baz:nomu ... (truncated)'. |

‎javascript/ql/test/query-tests/Expressions/UnknownDirective/UnknownDirective.js‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ function good() {
3737
"use cache";
3838
"use cache: remote";
3939
"use cache: private";
40+
"use workflow";
41+
"use step";
4042
}
4143

4244
function data() {

0 commit comments

Comments
 (0)