Skip to content

Commit 958af23

Browse files
committed
Add use cache directives
1 parent 86eb949 commit 958af23

File tree

5 files changed

+46
-6
lines changed

5 files changed

+46
-6
lines changed

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,21 @@ module Directive {
434434
class UseClientDirective extends KnownDirective {
435435
UseClientDirective() { this.getDirectiveText() = "use client" }
436436
}
437+
438+
/**
439+
* A `use cache` directive.
440+
*
441+
* Examples:
442+
*
443+
* ```
444+
* "use cache";
445+
* "use cache: remote";
446+
* "use cache: private";
447+
* ```
448+
*/
449+
class UseCacheDirective extends KnownDirective {
450+
UseCacheDirective() { this.getDirectiveText().regexpMatch("use cache(: (remote|private))?") }
451+
}
437452
}
438453

439454
/**
Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
| tst.js:1:1:1:13 | 'use strict'; | use strict |
22
| tst.js:2:1:2:10 | 'use asm'; | use asm |
33
| tst.js:3:1:3:9 | 'bundle'; | bundle |
4-
| tst.js:12:3:12:12 | 'use asm'; | use asm |
5-
| tst.js:19:5:19:17 | 'use strict'; | use strict |
4+
| tst.js:4:1:4:13 | 'use server'; | use server |
5+
| tst.js:5:1:5:13 | 'use client'; | use client |
6+
| tst.js:6:1:6:12 | 'use cache'; | use cache |
7+
| tst.js:7:1:7:20 | 'use cache: remote'; | use cache: remote |
8+
| tst.js:8:1:8:21 | 'use ca ... ivate'; | use cache: private |
9+
| tst.js:17:3:17:12 | 'use asm'; | use asm |
10+
| tst.js:18:3:18:11 | 'bundle'; | bundle |
11+
| tst.js:19:3:19:15 | 'use server'; | use server |
12+
| tst.js:20:3:20:15 | 'use client'; | use client |
13+
| tst.js:21:3:21:14 | 'use cache'; | use cache |
14+
| tst.js:22:3:22:22 | 'use cache: remote'; | use cache: remote |
15+
| tst.js:23:3:23:23 | 'use ca ... ivate'; | use cache: private |
16+
| tst.js:30:5:30:17 | 'use strict'; | use strict |

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
'use strict'; // this is a directive
22
'use asm'; // and so is this
33
'bundle';// and this
4+
'use server';
5+
'use client';
6+
'use cache';
7+
'use cache: remote';
8+
'use cache: private';
49
{
510
'use strict'; // but this isn't a directive
611
}
@@ -10,6 +15,12 @@
1015
function f() {
1116
'use\x20strict'; // this is a directive, though not a strict mode directive
1217
'use asm'; // and so is this
18+
'bundle';
19+
'use server';
20+
'use client';
21+
'use cache';
22+
'use cache: remote';
23+
'use cache: private';
1324
;
1425
'use strict'; // but this isn't a directive
1526
}

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:40:5:40:17 | "[0, 0, 0];"; | Unknown directive: '[0, 0, 0];'. |
15-
| UnknownDirective.js:41:5:41:65 | "[0, 0, ... , 0];"; | Unknown directive: '[0, 0, 0, 0, 0, 0, 0 ... (truncated)'. |
16-
| UnknownDirective.js:47:5:47:15 | ":nomunge"; | Unknown directive: ':nomunge'. |
17-
| UnknownDirective.js:48:5:48:30 | "foo(), ... munge"; | Unknown directive: 'foo(), bar, baz:nomu ... (truncated)'. |
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)'. |

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ function good() {
3434
"deps bar";
3535
"use server";
3636
"use client";
37+
"use cache";
38+
"use cache: remote";
39+
"use cache: private";
3740
}
3841

3942
function data() {

0 commit comments

Comments
 (0)