Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,14 @@
"main": "./out/extension.js",
"contributes": {
"commands": [
{
"command": "ast-results.newDetails",
"title": "Details"
},
{
"command": "cx.fixWithAI",
"title": "Fix with CxAI"
},
{
"command": "cx.viewDetails",
"title": "View Cx Package Details"
},
{
"command": "ast-results.viewResult",
"category": "ast-results",
Expand Down
18 changes: 17 additions & 1 deletion src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ export async function activate(context: vscode.ExtensionContext) {
);
if (ossEffected) {
scannerRegistry.getScanner("oss")?.register();
return
return;
}
const secretsEffected = section(
`${constants.secretsScanner}.${constants.activateSecretsScanner}`
Expand Down Expand Up @@ -276,6 +276,22 @@ export async function activate(context: vscode.ExtensionContext) {
console.log(">> Mock token has been saved to secrets");
await authService.validateAndUpdateState();
});


context.subscriptions.push(
vscode.commands.registerCommand("cx.fixWithAI", (diagnostic) => {
vscode.window.showInformationMessage(
`Fixing issue: ${diagnostic.message}`
);
})
);


context.subscriptions.push(
vscode.commands.registerCommand("cx.viewDetails", (diagnostic) => {
vscode.window.showInformationMessage(`Viewing details for: ${diagnostic?.message ?? 'no message'}`);
})
);
}

export function getGlobalContext(): vscode.ExtensionContext {
Expand Down
51 changes: 51 additions & 0 deletions src/realtimeScanners/scanners/oss/ossScannerService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,46 @@ import CxOssResult from "@checkmarxdev/ast-cli-javascript-wrapper/dist/main/oss/
import { CxRealtimeEngineStatus } from "@checkmarxdev/ast-cli-javascript-wrapper/dist/main/oss/CxRealtimeEngineStatus";
import { minimatch } from "minimatch";


export class QuickFixInlineProvider implements vscode.CodeActionProvider {
provideCodeActions(
document: vscode.TextDocument,
range: vscode.Range,
context: vscode.CodeActionContext,
token: vscode.CancellationToken
): vscode.CodeAction[] {
const actions: vscode.CodeAction[] = [];

for (const diagnostic of context.diagnostics) {
if (diagnostic.source !== "CxAI") {
continue;
}

const kind = vscode.CodeActionKind.Refactor.append("Checkmarx AI");

const fixAction = new vscode.CodeAction("Fix with CxAI", kind);
fixAction.command = {
command: "cx.fixWithAI",
title: "Fix with CxAI",
arguments: [diagnostic],
};

const viewAction = new vscode.CodeAction("View Cx Package Details", kind);
viewAction.command = {
command: "cx.viewDetails",
title: "View Cx Package Details",
arguments: [diagnostic],
};
actions.push(fixAction, viewAction);

}


return actions;
}
}


export class OssScannerService extends BaseScannerService {
private createDecoration(
iconName: string,
Expand Down Expand Up @@ -87,7 +127,17 @@ export class OssScannerService extends BaseScannerService {
this.editorChangeListener = vscode.window.onDidChangeActiveTextEditor(
this.onEditorChange.bind(this)
);


vscode.languages.registerCodeActionsProvider(
{ scheme: "file" },
new QuickFixInlineProvider(),
{
providedCodeActionKinds: [vscode.CodeActionKind.Refactor],
}
);
}

private onDocumentOpen(document: vscode.TextDocument): void {
if (this.matchesManifestPattern(document.uri.fsPath)) {
this.applyDecorations(document.uri);
Expand Down Expand Up @@ -162,6 +212,7 @@ export class OssScannerService extends BaseScannerService {
const vscodeUri = vscode.Uri.file(filePath);
this.diagnosticCollection.set(vscodeUri, diagnostics);
});

}

matchesManifestPattern(filePath: string): boolean {
Expand Down
Loading