Skip to content

Commit e379320

Browse files
Add row showing how many methods are hidden
1 parent bbacb14 commit e379320

2 files changed

Lines changed: 43 additions & 5 deletions

File tree

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import {
2+
VSCodeDataGridCell,
3+
VSCodeDataGridRow,
4+
} from "@vscode/webview-ui-toolkit/react";
5+
import * as React from "react";
6+
import { styled } from "styled-components";
7+
8+
const HiddenMethodsCell = styled(VSCodeDataGridCell)`
9+
text-align: center;
10+
`;
11+
12+
interface Props {
13+
numHiddenMethods: number;
14+
someMethodsAreVisible: boolean;
15+
}
16+
17+
export function HiddenMethodsRow(props: Props) {
18+
if (props.numHiddenMethods === 0) {
19+
return null;
20+
}
21+
22+
return (
23+
<VSCodeDataGridRow>
24+
<HiddenMethodsCell gridColumn="span 5">
25+
{props.someMethodsAreVisible && "And "}
26+
{props.numHiddenMethods} methods modeled in other CodeQL packs
27+
</HiddenMethodsCell>
28+
</VSCodeDataGridRow>
29+
);
30+
}

extensions/ql-vscode/src/view/model-editor/ModeledMethodDataGrid.tsx

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { useMemo } from "react";
1111
import { Mode } from "../../model-editor/shared/mode";
1212
import { sortMethods } from "../../model-editor/shared/sorting";
1313
import { InProgressMethods } from "../../model-editor/shared/in-progress-methods";
14+
import { HiddenMethodsRow } from "./HiddenMethodsRow";
1415

1516
export const GRID_TEMPLATE_COLUMNS = "0.5fr 0.125fr 0.125fr 0.125fr 0.125fr";
1617

@@ -35,11 +36,12 @@ export const ModeledMethodDataGrid = ({
3536
hideModeledApis,
3637
onChange,
3738
}: Props) => {
38-
const methodsWithModelability: Array<{
39-
method: Method;
40-
methodCanBeModeled: boolean;
41-
}> = useMemo(() => {
39+
const [methodsWithModelability, numHiddenMethods]: [
40+
Array<{ method: Method; methodCanBeModeled: boolean }>,
41+
number,
42+
] = useMemo(() => {
4243
const methodsWithModelability = [];
44+
let numHiddenMethods = 0;
4345
for (const method of sortMethods(methods)) {
4446
const modeledMethod = modeledMethods[method.signature];
4547
const methodIsUnsaved = modifiedSignatures.has(method.signature);
@@ -50,9 +52,11 @@ export const ModeledMethodDataGrid = ({
5052

5153
if (methodCanBeModeled || !hideModeledApis) {
5254
methodsWithModelability.push({ method, methodCanBeModeled });
55+
} else {
56+
numHiddenMethods += 1;
5357
}
5458
}
55-
return methodsWithModelability;
59+
return [methodsWithModelability, numHiddenMethods];
5660
}, [hideModeledApis, methods, modeledMethods, modifiedSignatures]);
5761

5862
const someMethodsAreVisible = methodsWithModelability.length > 0;
@@ -95,6 +99,10 @@ export const ModeledMethodDataGrid = ({
9599
))}
96100
</>
97101
)}
102+
<HiddenMethodsRow
103+
numHiddenMethods={numHiddenMethods}
104+
someMethodsAreVisible={someMethodsAreVisible}
105+
/>
98106
</VSCodeDataGrid>
99107
);
100108
};

0 commit comments

Comments
 (0)