Skip to content

Commit 70de59e

Browse files
authored
Merge pull request #491 from jcreedcmu/jcreed/cleanup
Remove pagination feature flag
2 parents 06b5132 + 27dd804 commit 70de59e

6 files changed

Lines changed: 45 additions & 259 deletions

File tree

extensions/ql-vscode/src/adapt.ts

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -103,30 +103,7 @@ export function adaptBqrs(schema: AdaptedSchema, page: DecodedBqrsChunk): RawRes
103103
};
104104
}
105105

106-
/**
107-
* This type has two branches; we are in the process of changing from
108-
* one to the other. The old way is to parse them inside the webview,
109-
* the new way is to parse them in the extension. The main motivation
110-
* for this transition is to make pagination possible in such a way
111-
* that only one page needs to be sent from the extension to the webview.
112-
*/
113-
export type ParsedResultSets = ExtensionParsedResultSets | WebviewParsedResultSets;
114-
115-
/**
116-
* The old method doesn't require any nontrivial information to be included here,
117-
* just a tag to indicate that it is being used.
118-
*/
119-
export interface WebviewParsedResultSets {
120-
t: 'WebviewParsed';
121-
selectedTable?: string; // when undefined, means 'show default table'
122-
}
123-
124-
/**
125-
* The new method includes which bqrs page is being sent, and the
126-
* actual results parsed on the extension side.
127-
*/
128-
export interface ExtensionParsedResultSets {
129-
t: 'ExtensionParsed';
106+
export interface ParsedResultSets {
130107
pageNumber: number;
131108
numPages: number;
132109
numInterpretedPages: number;

extensions/ql-vscode/src/config.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,6 @@ class Setting {
3939

4040
const ROOT_SETTING = new Setting('codeQL');
4141

42-
// Enable experimental features
43-
44-
/**
45-
* Any settings below are deliberately not in package.json so that
46-
* they do not appear in the settings ui in vscode itself. If users
47-
* want to enable experimental features, they can add them directly in
48-
* their vscode settings json file.
49-
*/
50-
51-
/* Advanced setting: used to enable bqrs parsing in the cli instead of in the webview. */
52-
export const EXPERIMENTAL_BQRS_SETTING = new Setting('experimentalBqrsParsing', ROOT_SETTING);
53-
5442
// Distribution configuration
5543

5644
const DISTRIBUTION_SETTING = new Setting('cli', ROOT_SETTING);

extensions/ql-vscode/src/interface.ts

Lines changed: 26 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ import {
4141
ParsedResultSets,
4242
RawResultSet,
4343
} from './adapt';
44-
import { EXPERIMENTAL_BQRS_SETTING } from './config';
4544
import {
4645
WebviewReveal,
4746
fileUriToWebviewUri,
@@ -335,40 +334,33 @@ export class InterfaceManager extends DisposableObject {
335334
}
336335

337336
const getParsedResultSets = async (): Promise<ParsedResultSets> => {
338-
if (EXPERIMENTAL_BQRS_SETTING.getValue()) {
339-
const resultSetSchemas = await this.getResultSetSchemas(results);
340-
const resultSetNames = resultSetSchemas.map(schema => schema.name);
341-
342-
// This may not wind up being the page we actually show, if there are interpreted results,
343-
// but speculatively send it anyway.
344-
const selectedTable = getDefaultResultSetName(resultSetNames);
345-
const schema = resultSetSchemas.find(
346-
(resultSet) => resultSet.name == selectedTable
347-
)!;
348-
if (schema === undefined) {
349-
return { t: 'WebviewParsed' };
350-
}
351337

352-
const chunk = await this.cliServer.bqrsDecode(
353-
results.query.resultsPaths.resultsPath,
354-
schema.name,
355-
RAW_RESULTS_PAGE_SIZE,
356-
schema.pagination?.offsets[0]
357-
);
358-
const adaptedSchema = adaptSchema(schema);
359-
const resultSet = adaptBqrs(adaptedSchema, chunk);
360-
return {
361-
t: 'ExtensionParsed',
362-
pageNumber: 0,
363-
numPages: numPagesOfResultSet(resultSet),
364-
numInterpretedPages: numInterpretedPages(this._interpretation),
365-
resultSet: { t: 'RawResultSet', ...resultSet },
366-
selectedTable: undefined,
367-
resultSetNames,
368-
};
369-
} else {
370-
return { t: 'WebviewParsed' };
371-
}
338+
const resultSetSchemas = await this.getResultSetSchemas(results);
339+
const resultSetNames = resultSetSchemas.map(schema => schema.name);
340+
341+
// This may not wind up being the page we actually show, if there are interpreted results,
342+
// but speculatively send it anyway.
343+
const selectedTable = getDefaultResultSetName(resultSetNames);
344+
const schema = resultSetSchemas.find(
345+
(resultSet) => resultSet.name == selectedTable
346+
)!;
347+
348+
const chunk = await this.cliServer.bqrsDecode(
349+
results.query.resultsPaths.resultsPath,
350+
schema.name,
351+
RAW_RESULTS_PAGE_SIZE,
352+
schema.pagination?.offsets[0]
353+
);
354+
const adaptedSchema = adaptSchema(schema);
355+
const resultSet = adaptBqrs(adaptedSchema, chunk);
356+
return {
357+
pageNumber: 0,
358+
numPages: numPagesOfResultSet(resultSet),
359+
numInterpretedPages: numInterpretedPages(this._interpretation),
360+
resultSet: { t: 'RawResultSet', ...resultSet },
361+
selectedTable: undefined,
362+
resultSetNames,
363+
};
372364
};
373365

374366
await this.postMessage({
@@ -461,7 +453,6 @@ export class InterfaceManager extends DisposableObject {
461453
const resultSet = adaptBqrs(adaptedSchema, chunk);
462454

463455
const parsedResultSets: ParsedResultSets = {
464-
t: 'ExtensionParsed',
465456
pageNumber,
466457
resultSet: { t: 'RawResultSet', ...resultSet },
467458
numPages: numPagesOfResultSet(resultSet),

extensions/ql-vscode/src/view/raw-results-table.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export class RawTable extends React.Component<RawTableProps, {}> {
3030
const tableRows = dataRows.map((row: ResultRow, rowIndex: number) =>
3131
<RawTableRow
3232
key={rowIndex}
33-
rowIndex={rowIndex}
33+
rowIndex={rowIndex + this.props.offset}
3434
row={row}
3535
databaseUri={databaseUri}
3636
/>

extensions/ql-vscode/src/view/result-tables.tsx

Lines changed: 15 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
import { PathTable } from './alert-table';
1616
import { RawTable } from './raw-results-table';
1717
import { ResultTableProps, tableSelectionHeaderClassName, toggleDiagnosticsClassName, alertExtrasClassName } from './result-table-utils';
18-
import { ParsedResultSets, ExtensionParsedResultSets } from '../adapt';
18+
import { ParsedResultSets } from '../adapt';
1919
import { vscode } from './vscode-api';
2020

2121

@@ -90,52 +90,23 @@ export class ResultTables
9090
}
9191

9292
private getResultSetNames(resultSets: ResultSet[]): string[] {
93-
if (this.props.parsedResultSets.t === 'ExtensionParsed') {
94-
return this.props.parsedResultSets.resultSetNames.concat([ALERTS_TABLE_NAME]);
95-
}
96-
else {
97-
return resultSets.map(resultSet => resultSet.schema.name);
98-
}
99-
}
100-
101-
/**
102-
* Holds if we have a result set obtained from the extension that came
103-
* from the ExtensionParsed branch of ParsedResultSets. This is evidence
104-
* that the user has the experimental flag turned on that allows extension-side
105-
* bqrs parsing.
106-
*/
107-
paginationAllowed(): boolean {
108-
return this.props.parsedResultSets.t === 'ExtensionParsed';
93+
return this.props.parsedResultSets.resultSetNames.concat([ALERTS_TABLE_NAME]);
10994
}
11095

11196
constructor(props: ResultTablesProps) {
11297
super(props);
11398
const selectedTable = props.parsedResultSets.selectedTable || getDefaultResultSet(this.getResultSets());
114-
let selectedPage: string;
115-
116-
switch (props.parsedResultSets.t) {
117-
case 'ExtensionParsed':
118-
selectedPage = (props.parsedResultSets.pageNumber + 1) + '';
119-
break;
120-
case 'WebviewParsed':
121-
selectedPage = '';
122-
break;
123-
}
99+
const selectedPage = (props.parsedResultSets.pageNumber + 1) + '';
124100
this.state = { selectedTable, selectedPage };
125101
}
126102

127103
private onTableSelectionChange = (event: React.ChangeEvent<HTMLSelectElement>): void => {
128104
const selectedTable = event.target.value;
129-
130-
if (this.paginationAllowed()) {
131-
vscode.postMessage({
132-
t: 'changePage',
133-
pageNumber: 0,
134-
selectedTable
135-
});
136-
}
137-
else
138-
this.setState({ selectedTable });
105+
vscode.postMessage({
106+
t: 'changePage',
107+
pageNumber: 0,
108+
selectedTable
109+
});
139110
}
140111

141112
private alertTableExtras(): JSX.Element | undefined {
@@ -164,15 +135,11 @@ export class ResultTables
164135

165136
getOffset(): number {
166137
const { parsedResultSets } = this.props;
167-
switch (parsedResultSets.t) {
168-
case 'ExtensionParsed':
169-
return parsedResultSets.pageNumber * RAW_RESULTS_PAGE_SIZE;
170-
case 'WebviewParsed':
171-
return 0;
172-
}
138+
return parsedResultSets.pageNumber * RAW_RESULTS_PAGE_SIZE;
173139
}
174140

175-
renderPageButtons(resultSets: ExtensionParsedResultSets): JSX.Element {
141+
renderPageButtons(): JSX.Element {
142+
const { parsedResultSets } = this.props;
176143
const selectedTable = this.state.selectedTable;
177144

178145
// FIXME: The extension, not the view, should be in charge of deciding whether to initially show
@@ -181,7 +148,7 @@ export class ResultTables
181148
// not interpreted pages, because the extension doesn't know the view will default to showing alerts
182149
// instead.
183150
const numPages = selectedTable == ALERTS_TABLE_NAME ?
184-
resultSets.numInterpretedPages : resultSets.numPages;
151+
parsedResultSets.numInterpretedPages : parsedResultSets.numPages;
185152

186153
const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
187154
this.setState({ selectedPage: e.target.value });
@@ -201,14 +168,14 @@ export class ResultTables
201168
const prevPage = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
202169
vscode.postMessage({
203170
t: 'changePage',
204-
pageNumber: Math.max(resultSets.pageNumber - 1, 0),
171+
pageNumber: Math.max(parsedResultSets.pageNumber - 1, 0),
205172
selectedTable,
206173
});
207174
};
208175
const nextPage = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
209176
vscode.postMessage({
210177
t: 'changePage',
211-
pageNumber: Math.min(resultSets.pageNumber + 1, numPages - 1),
178+
pageNumber: Math.min(parsedResultSets.pageNumber + 1, numPages - 1),
212179
selectedTable,
213180
});
214181
};
@@ -230,13 +197,6 @@ export class ResultTables
230197
</span>;
231198
}
232199

233-
renderButtons(): JSX.Element {
234-
if (this.props.parsedResultSets.t === 'ExtensionParsed' && this.paginationAllowed())
235-
return this.renderPageButtons(this.props.parsedResultSets);
236-
else
237-
return <span />;
238-
}
239-
240200
render(): React.ReactNode {
241201
const { selectedTable } = this.state;
242202
const resultSets = this.getResultSets();
@@ -250,7 +210,7 @@ export class ResultTables
250210
resultSetNames.map(name => <option key={name} value={name}>{name}</option>);
251211

252212
return <div>
253-
{this.renderButtons()}
213+
{this.renderPageButtons()}
254214
<div className={tableSelectionHeaderClassName}>
255215
<select value={selectedTable} onChange={this.onTableSelectionChange}>
256216
{resultSetOptions}

0 commit comments

Comments
 (0)