Add a canary setting to avoid caching AST viewer queries (#818)
When codeql library developers are working on PrintAST queries, it is not easy to use the AST Viewer. The AST Viewer caches results so that multiple calls to view the AST of the same file are nearly instantaneous. However, this breaks down if you are changing the actual queries that perform AST viewing. In this case, you do not want the cache to be active. This commit adds an undocumented setting that prevents caching. To enable, set: ``` "codeQL.isCanary": true, "codeQL.astViewer.disableCache": true ``` Note that *both* settings must be true for this to work. This behaviour and all canary behaviour should be documented somewhere. I will add that later.
This commit is contained in:
@@ -25,6 +25,7 @@ import {
|
||||
} from './keyType';
|
||||
import { FullLocationLink, getLocationsForUriString, TEMPLATE_NAME } from './locationFinder';
|
||||
import { qlpackOfDatabase, resolveQueries } from './queryResolver';
|
||||
import { isCanary, NO_CACHE_AST_VIEWER } from '../config';
|
||||
|
||||
/**
|
||||
* Run templated CodeQL queries to find definitions and references in
|
||||
@@ -141,7 +142,9 @@ export class TemplatePrintAstProvider {
|
||||
if (!document) {
|
||||
throw new Error('Cannot view the AST. Please select a valid source file inside a CodeQL database.');
|
||||
}
|
||||
const queryResults = await this.cache.get(document.uri.toString(), progress, token);
|
||||
const queryResults = this.shouldCache()
|
||||
? await this.cache.get(document.uri.toString(), progress, token)
|
||||
: await this.getAst(document.uri.toString(), progress, token);
|
||||
|
||||
return new AstBuilder(
|
||||
queryResults, this.cli,
|
||||
@@ -150,6 +153,10 @@ export class TemplatePrintAstProvider {
|
||||
);
|
||||
}
|
||||
|
||||
private shouldCache() {
|
||||
return !(isCanary() && NO_CACHE_AST_VIEWER.getValue<boolean>());
|
||||
}
|
||||
|
||||
private async getAst(
|
||||
uriString: string,
|
||||
progress: ProgressCallback,
|
||||
|
||||
Reference in New Issue
Block a user