From dda059560bb03425da18f0f603a72fde9237d2d2 Mon Sep 17 00:00:00 2001 From: Richard Willis Date: Thu, 7 Nov 2024 22:45:56 +0000 Subject: [PATCH] Fix formatting --- .../src/DiagnosticsService.ts | 451 ++++++++---------- Src/CSharpier.VSCode/src/Extension.ts | 21 +- .../src/FixAllCodeActionCommand.ts | 100 ++-- .../src/FixAllCodeActionProvider.ts | 89 ++-- 4 files changed, 308 insertions(+), 353 deletions(-) diff --git a/Src/CSharpier.VSCode/src/DiagnosticsService.ts b/Src/CSharpier.VSCode/src/DiagnosticsService.ts index 8a4dc7759..049676296 100644 --- a/Src/CSharpier.VSCode/src/DiagnosticsService.ts +++ b/Src/CSharpier.VSCode/src/DiagnosticsService.ts @@ -1,276 +1,241 @@ -import * as vscode from 'vscode'; -import { - Difference, - generateDifferences, - showInvisibles, -} from 'prettier-linter-helpers'; -import { FixAllCodeActionsCommand } from './FixAllCodeActionCommand'; -import { CSharpierProcessProvider } from './CSharpierProcessProvider'; -import { Logger } from './Logger'; +import * as vscode from "vscode"; +import { Difference, generateDifferences, showInvisibles } from "prettier-linter-helpers"; +import { FixAllCodeActionsCommand } from "./FixAllCodeActionCommand"; +import { CSharpierProcessProvider } from "./CSharpierProcessProvider"; +import { Logger } from "./Logger"; -const DIAGNOSTICS_ID = 'csharpier'; -const DIAGNOSTICS_SOURCE_ID = 'diagnostic'; +const DIAGNOSTICS_ID = "csharpier"; +const DIAGNOSTICS_SOURCE_ID = "diagnostic"; export interface CsharpierDiff { - source: string; - formattedSource: string; - differences: Difference[]; + source: string; + formattedSource: string; + differences: Difference[]; } -export class DiagnosticsService implements vscode.CodeActionProvider, vscode.Disposable -{ - public static readonly quickFixCodeActionKind = - vscode.CodeActionKind.QuickFix.append(DIAGNOSTICS_ID); - public static metadata: vscode.CodeActionProviderMetadata = { - providedCodeActionKinds: [DiagnosticsService.quickFixCodeActionKind], - }; - - private diagnosticCollection: vscode.DiagnosticCollection; - private diagnosticDifferenceMap: Map = - new Map(); - private codeActionsProvider: vscode.Disposable | undefined; - private readonly disposables: vscode.Disposable[] = []; - - constructor( - private readonly csharpierProcessProvider: CSharpierProcessProvider, - private documentSelector: Array, - private readonly logger: Logger, - ) { - this.diagnosticCollection = vscode.languages.createDiagnosticCollection(DIAGNOSTICS_ID); - this.codeActionsProvider = vscode.languages.registerCodeActionsProvider( - this.documentSelector, - this, - DiagnosticsService.metadata - ); - this.registerEditorEvents(); - } +export class DiagnosticsService implements vscode.CodeActionProvider, vscode.Disposable { + public static readonly quickFixCodeActionKind = + vscode.CodeActionKind.QuickFix.append(DIAGNOSTICS_ID); + public static metadata: vscode.CodeActionProviderMetadata = { + providedCodeActionKinds: [DiagnosticsService.quickFixCodeActionKind], + }; - public dispose(): void { - for (const disposable of this.disposables) { - disposable.dispose(); + private diagnosticCollection: vscode.DiagnosticCollection; + private diagnosticDifferenceMap: Map = new Map(); + private codeActionsProvider: vscode.Disposable; + private readonly disposables: vscode.Disposable[] = []; + + constructor( + private readonly csharpierProcessProvider: CSharpierProcessProvider, + private readonly documentSelector: Array, + private readonly logger: Logger, + ) { + this.diagnosticCollection = vscode.languages.createDiagnosticCollection(DIAGNOSTICS_ID); + this.codeActionsProvider = vscode.languages.registerCodeActionsProvider( + this.documentSelector, + this, + DiagnosticsService.metadata, + ); + this.registerEditorEvents(); } - this.diagnosticCollection.dispose(); - this.codeActionsProvider?.dispose(); - } - private handleChangeTextDocument(document: vscode.TextDocument): void { - void this.runDiagnostics(document); - } - - public async runDiagnostics(document: vscode.TextDocument): Promise { - const shouldRunDiagnostics = - this.documentSelector.some( - (selector) => selector.language === document.languageId - ) && - !!vscode.workspace.getWorkspaceFolder(document.uri); - if (shouldRunDiagnostics) { - try { - const diff = await this.getDiff(document); - this.updateDiagnostics(document, diff); - } catch (e) { - this.logger.error( - `Unable to provide diagnostics: ${(e as Error).message}` - ); - } + public dispose(): void { + for (const disposable of this.disposables) { + disposable.dispose(); + } + this.diagnosticCollection.dispose(); + this.codeActionsProvider.dispose(); } - } - public updateDiagnostics( - document: vscode.TextDocument, - diff: CsharpierDiff - ): void { - const diagnostics = this.getDiagnostics(document, diff); - this.diagnosticCollection.set(document.uri, diagnostics); - } + private handleChangeTextDocument(document: vscode.TextDocument): void { + void this.runDiagnostics(document); + } - private registerEditorEvents(): void { + public async runDiagnostics(document: vscode.TextDocument): Promise { + const shouldRunDiagnostics = + this.documentSelector.some(selector => selector.language === document.languageId) && + !!vscode.workspace.getWorkspaceFolder(document.uri); + if (shouldRunDiagnostics) { + try { + const diff = await this.getDiff(document); + this.updateDiagnostics(document, diff); + } catch (e) { + this.logger.error(`Unable to provide diagnostics: ${(e as Error).message}`); + } + } + } - const activeDocument = vscode.window.activeTextEditor?.document; - if (activeDocument) { - void this.runDiagnostics(activeDocument); + public updateDiagnostics(document: vscode.TextDocument, diff: CsharpierDiff): void { + const diagnostics = this.getDiagnostics(document, diff); + this.diagnosticCollection.set(document.uri, diagnostics); } - const onDidChangeTextDocument = vscode.workspace.onDidChangeTextDocument( - (e: vscode.TextDocumentChangeEvent) => { - if ( - e.contentChanges.length && - vscode.window.activeTextEditor?.document === e.document - ) { - this.handleChangeTextDocument(e.document); + private registerEditorEvents(): void { + const activeDocument = vscode.window.activeTextEditor?.document; + if (activeDocument) { + void this.runDiagnostics(activeDocument); } - } - ); - const onDidChangeActiveTextEditor = - vscode.window.onDidChangeActiveTextEditor( - (editor?: vscode.TextEditor) => { - if (editor) { - void this.runDiagnostics(editor.document); - } - } - ); + const onDidChangeTextDocument = vscode.workspace.onDidChangeTextDocument( + (e: vscode.TextDocumentChangeEvent) => { + if ( + e.contentChanges.length && + vscode.window.activeTextEditor?.document === e.document + ) { + this.handleChangeTextDocument(e.document); + } + }, + ); - this.disposables.push( - onDidChangeTextDocument, - onDidChangeActiveTextEditor, - this.diagnosticCollection - ); - } + const onDidChangeActiveTextEditor = vscode.window.onDidChangeActiveTextEditor( + (editor?: vscode.TextEditor) => { + if (editor) { + void this.runDiagnostics(editor.document); + } + }, + ); - private getDiagnostics( - document: vscode.TextDocument, - diff: CsharpierDiff - ): vscode.Diagnostic[] { - const diagnostics: vscode.Diagnostic[] = []; - for (const difference of diff.differences) { - const diagnostic = this.getDiagnostic(document, difference); - this.diagnosticDifferenceMap.set(diagnostic, difference); - diagnostics.push(diagnostic); + this.disposables.push( + onDidChangeTextDocument, + onDidChangeActiveTextEditor, + this.diagnosticCollection, + ); } - return diagnostics; - } - private getDiagnostic( - document: vscode.TextDocument, - difference: Difference - ): vscode.Diagnostic { - const range = this.getRange(document, difference); - const message = this.getMessage(difference); - const diagnostic = new vscode.Diagnostic(range, message); - diagnostic.source = DIAGNOSTICS_ID; - diagnostic.code = DIAGNOSTICS_SOURCE_ID; - return diagnostic; - } + private getDiagnostics( + document: vscode.TextDocument, + diff: CsharpierDiff, + ): vscode.Diagnostic[] { + const diagnostics: vscode.Diagnostic[] = []; + for (const difference of diff.differences) { + const diagnostic = this.getDiagnostic(document, difference); + this.diagnosticDifferenceMap.set(diagnostic, difference); + diagnostics.push(diagnostic); + } + return diagnostics; + } - private getMessage(difference: Difference): string { - switch (difference.operation) { - case generateDifferences.INSERT: - return `Insert ${showInvisibles(difference.insertText!)}`; - case generateDifferences.REPLACE: - return `Replace ${showInvisibles( - difference.deleteText! - )} with ${showInvisibles(difference.insertText!)}`; - case generateDifferences.DELETE: - return `Delete ${showInvisibles(difference.deleteText!)}`; - default: - return ''; + private getDiagnostic( + document: vscode.TextDocument, + difference: Difference, + ): vscode.Diagnostic { + const range = this.getRange(document, difference); + const message = this.getMessage(difference); + const diagnostic = new vscode.Diagnostic(range, message); + diagnostic.source = DIAGNOSTICS_ID; + diagnostic.code = DIAGNOSTICS_SOURCE_ID; + return diagnostic; } - } - private getRange( - document: vscode.TextDocument, - difference: Difference - ): vscode.Range { - if (difference.operation === generateDifferences.INSERT) { - const start = document.positionAt(difference.offset); - return new vscode.Range( - start.line, - start.character, - start.line, - start.character - ); + private getMessage(difference: Difference): string { + switch (difference.operation) { + case generateDifferences.INSERT: + return `Insert ${showInvisibles(difference.insertText!)}`; + case generateDifferences.REPLACE: + return `Replace ${showInvisibles(difference.deleteText!)} with ${showInvisibles( + difference.insertText!, + )}`; + case generateDifferences.DELETE: + return `Delete ${showInvisibles(difference.deleteText!)}`; + default: + return ""; + } } - const start = document.positionAt(difference.offset); - const end = document.positionAt( - difference.offset + difference.deleteText!.length - ); - return new vscode.Range( - start.line, - start.character, - end.line, - end.character - ); - } - private async getDiff(document: vscode.TextDocument): Promise { - const source = document.getText(); - const csharpierProcess = this.csharpierProcessProvider.getProcessFor(document.fileName); - let formattedSource = ''; - if ("formatFile2" in csharpierProcess) { - const parameter = { - fileContents: source, - fileName: document.fileName, - }; - const result = await csharpierProcess.formatFile2(parameter); - if (result) { - formattedSource = result.formattedFile; - } - } else { - formattedSource = await csharpierProcess.formatFile(source, document.fileName); + private getRange(document: vscode.TextDocument, difference: Difference): vscode.Range { + if (difference.operation === generateDifferences.INSERT) { + const start = document.positionAt(difference.offset); + return new vscode.Range(start.line, start.character, start.line, start.character); + } + const start = document.positionAt(difference.offset); + const end = document.positionAt(difference.offset + difference.deleteText!.length); + return new vscode.Range(start.line, start.character, end.line, end.character); } - const differences = generateDifferences(source, formattedSource); - return { - source, - formattedSource, - differences, - }; - } - public provideCodeActions( - document: vscode.TextDocument, - range: vscode.Range | vscode.Selection - ): vscode.CodeAction[] { - let totalDiagnostics = 0; - const codeActions: vscode.CodeAction[] = []; - this.diagnosticCollection.forEach( - (uri: vscode.Uri, diagnostics: readonly vscode.Diagnostic[]) => { - if (document.uri.fsPath !== uri.fsPath) { - return; + private async getDiff(document: vscode.TextDocument): Promise { + const source = document.getText(); + const csharpierProcess = this.csharpierProcessProvider.getProcessFor(document.fileName); + let formattedSource = ""; + if ("formatFile2" in csharpierProcess) { + const parameter = { + fileContents: source, + fileName: document.fileName, + }; + const result = await csharpierProcess.formatFile2(parameter); + if (result) { + formattedSource = result.formattedFile; + } + } else { + formattedSource = await csharpierProcess.formatFile(source, document.fileName); } - diagnostics.forEach((diagnostic: vscode.Diagnostic) => { - totalDiagnostics += 1; - if (!range.isEqual(diagnostic.range)) { - return; - } - const difference = this.diagnosticDifferenceMap.get(diagnostic); - codeActions.push( - this.getQuickFixCodeAction(document.uri, diagnostic, difference!) - ); - }); - } - ); - if (totalDiagnostics > 1) { - codeActions.push( - this.getQuickFixAllProblemsCodeAction(document, totalDiagnostics) - ); + const differences = generateDifferences(source, formattedSource); + return { + source, + formattedSource, + differences, + }; } - return codeActions; - } - private getQuickFixCodeAction( - uri: vscode.Uri, - diagnostic: vscode.Diagnostic, - difference: Difference - ): vscode.CodeAction { - const action = new vscode.CodeAction( - `Fix this ${DIAGNOSTICS_ID} problem`, - DiagnosticsService.quickFixCodeActionKind - ); - action.edit = new vscode.WorkspaceEdit(); - if (difference.operation === generateDifferences.INSERT) { - action.edit.insert(uri, diagnostic.range.start, difference.insertText!); - } else if (difference.operation === generateDifferences.REPLACE) { - action.edit.replace(uri, diagnostic.range, difference.insertText!); - } else if (difference.operation === generateDifferences.DELETE) { - action.edit.delete(uri, diagnostic.range); + public provideCodeActions( + document: vscode.TextDocument, + range: vscode.Range | vscode.Selection, + ): vscode.CodeAction[] { + let totalDiagnostics = 0; + const codeActions: vscode.CodeAction[] = []; + this.diagnosticCollection.forEach( + (uri: vscode.Uri, diagnostics: readonly vscode.Diagnostic[]) => { + if (document.uri.fsPath !== uri.fsPath) { + return; + } + diagnostics.forEach((diagnostic: vscode.Diagnostic) => { + totalDiagnostics += 1; + if (!range.isEqual(diagnostic.range)) { + return; + } + const difference = this.diagnosticDifferenceMap.get(diagnostic); + codeActions.push( + this.getQuickFixCodeAction(document.uri, diagnostic, difference!), + ); + }); + }, + ); + if (totalDiagnostics > 1) { + codeActions.push(this.getQuickFixAllProblemsCodeAction(document, totalDiagnostics)); + } + return codeActions; } - return action; - } - private getQuickFixAllProblemsCodeAction( - document: vscode.TextDocument, - totalDiagnostics: number - ): vscode.CodeAction { - const title = `Fix all ${DIAGNOSTICS_ID} problems (${totalDiagnostics})`; - const action = new vscode.CodeAction( - title, - DiagnosticsService.quickFixCodeActionKind - ); - action.command = { - title, - command: FixAllCodeActionsCommand.Id, - arguments: [document], - }; - return action; - } + private getQuickFixCodeAction( + uri: vscode.Uri, + diagnostic: vscode.Diagnostic, + difference: Difference, + ): vscode.CodeAction { + const action = new vscode.CodeAction( + `Fix this ${DIAGNOSTICS_ID} problem`, + DiagnosticsService.quickFixCodeActionKind, + ); + action.edit = new vscode.WorkspaceEdit(); + if (difference.operation === generateDifferences.INSERT) { + action.edit.insert(uri, diagnostic.range.start, difference.insertText!); + } else if (difference.operation === generateDifferences.REPLACE) { + action.edit.replace(uri, diagnostic.range, difference.insertText!); + } else if (difference.operation === generateDifferences.DELETE) { + action.edit.delete(uri, diagnostic.range); + } + return action; + } + + private getQuickFixAllProblemsCodeAction( + document: vscode.TextDocument, + totalDiagnostics: number, + ): vscode.CodeAction { + const title = `Fix all ${DIAGNOSTICS_ID} problems (${totalDiagnostics})`; + const action = new vscode.CodeAction(title, DiagnosticsService.quickFixCodeActionKind); + action.command = { + title, + command: FixAllCodeActionsCommand.Id, + arguments: [document], + }; + return action; + } } diff --git a/Src/CSharpier.VSCode/src/Extension.ts b/Src/CSharpier.VSCode/src/Extension.ts index 4169376be..694c6bd00 100644 --- a/Src/CSharpier.VSCode/src/Extension.ts +++ b/Src/CSharpier.VSCode/src/Extension.ts @@ -40,24 +40,25 @@ const initPlugin = async (context: ExtensionContext) => { NullCSharpierProcess.create(logger); const csharpierProcessProvider = new CSharpierProcessProvider(logger, context.extension); - const diagnosticsDocumentSelector: DocumentFilter[] = [{ - language:'csharp', - scheme: 'file', - }]; + const diagnosticsDocumentSelector: DocumentFilter[] = [ + { + language: "csharp", + scheme: "file", + }, + ]; const diagnosticsService = new DiagnosticsService( csharpierProcessProvider, diagnosticsDocumentSelector, - logger - ); - const fixAllCodeActionProvider = new FixAllCodeActionProvider( - diagnosticsDocumentSelector + logger, ); + const fixAllCodeActionProvider = new FixAllCodeActionProvider(diagnosticsDocumentSelector); new FormattingService(logger, csharpierProcessProvider); new FixAllCodeActionsCommand(context, csharpierProcessProvider, logger); context.subscriptions.push( - csharpierProcessProvider, + csharpierProcessProvider, fixAllCodeActionProvider, - diagnosticsService); + diagnosticsService, + ); }; diff --git a/Src/CSharpier.VSCode/src/FixAllCodeActionCommand.ts b/Src/CSharpier.VSCode/src/FixAllCodeActionCommand.ts index d1a669947..c0cf31353 100644 --- a/Src/CSharpier.VSCode/src/FixAllCodeActionCommand.ts +++ b/Src/CSharpier.VSCode/src/FixAllCodeActionCommand.ts @@ -1,59 +1,53 @@ -import * as vscode from 'vscode'; -import { CSharpierProcessProvider } from './CSharpierProcessProvider'; -import { Logger } from './Logger'; +import * as vscode from "vscode"; +import { CSharpierProcessProvider } from "./CSharpierProcessProvider"; +import { Logger } from "./Logger"; -export class FixAllCodeActionsCommand { - public static readonly Id = 'csharpier-vscode.fixAllCodeActions'; - public readonly id = FixAllCodeActionsCommand.Id; +export class FixAllCodeActionsCommand { + public static readonly Id = "csharpier-vscode.fixAllCodeActions"; + public readonly id = FixAllCodeActionsCommand.Id; - constructor( - private readonly context: vscode.ExtensionContext, - private readonly csharpierProcessProvider: CSharpierProcessProvider, - private readonly logger: Logger - ) { - this.context.subscriptions.push( - vscode.commands.registerCommand(this.id, this.execute) - ); - } - - public execute = async ( - document: vscode.TextDocument, - ): Promise => { - try { - const changes = await this.getChanges(document); - if (!changes) { - return; - } - const range = new vscode.Range( - document.positionAt(0), - document.positionAt(document.getText().length) - ); - const workspaceEdit = new vscode.WorkspaceEdit(); - workspaceEdit.replace(document.uri, range, changes); - await vscode.workspace.applyEdit(workspaceEdit); - } catch (e) { - this.logger.error(`Unable to apply workspace edits: ${(e as Error).message}`); + constructor( + private readonly context: vscode.ExtensionContext, + private readonly csharpierProcessProvider: CSharpierProcessProvider, + private readonly logger: Logger, + ) { + this.context.subscriptions.push(vscode.commands.registerCommand(this.id, this.execute)); } - }; - private async getChanges( - document: vscode.TextDocument - ): Promise { - let formattedSource = ''; - const source = document.getText(); - const csharpierProcess = this.csharpierProcessProvider.getProcessFor(document.fileName); - if ("formatFile2" in csharpierProcess) { - const parameter = { - fileContents: source, - fileName: document.fileName, - }; - const result = await csharpierProcess.formatFile2(parameter); - if (result) { - formattedSource = result.formattedFile; - } - } else { - formattedSource = await csharpierProcess.formatFile(source, document.fileName); + public execute = async (document: vscode.TextDocument): Promise => { + try { + const changes = await this.getChanges(document); + if (!changes) { + return; + } + const range = new vscode.Range( + document.positionAt(0), + document.positionAt(document.getText().length), + ); + const workspaceEdit = new vscode.WorkspaceEdit(); + workspaceEdit.replace(document.uri, range, changes); + await vscode.workspace.applyEdit(workspaceEdit); + } catch (e) { + this.logger.error(`Unable to apply workspace edits: ${(e as Error).message}`); + } + }; + + private async getChanges(document: vscode.TextDocument): Promise { + let formattedSource = ""; + const source = document.getText(); + const csharpierProcess = this.csharpierProcessProvider.getProcessFor(document.fileName); + if ("formatFile2" in csharpierProcess) { + const parameter = { + fileContents: source, + fileName: document.fileName, + }; + const result = await csharpierProcess.formatFile2(parameter); + if (result) { + formattedSource = result.formattedFile; + } + } else { + formattedSource = await csharpierProcess.formatFile(source, document.fileName); + } + return formattedSource; } - return formattedSource; - } } diff --git a/Src/CSharpier.VSCode/src/FixAllCodeActionProvider.ts b/Src/CSharpier.VSCode/src/FixAllCodeActionProvider.ts index b99d59b5c..3a57a7b4c 100644 --- a/Src/CSharpier.VSCode/src/FixAllCodeActionProvider.ts +++ b/Src/CSharpier.VSCode/src/FixAllCodeActionProvider.ts @@ -1,57 +1,52 @@ -import * as vscode from 'vscode'; -import { FixAllCodeActionsCommand } from './FixAllCodeActionCommand'; +import * as vscode from "vscode"; +import { FixAllCodeActionsCommand } from "./FixAllCodeActionCommand"; const noChanges: vscode.CodeAction[] = []; -export class FixAllCodeActionProvider - implements vscode.CodeActionProvider, vscode.Disposable -{ - public static readonly fixAllCodeActionKind = - vscode.CodeActionKind.SourceFixAll.append('csharpier'); +export class FixAllCodeActionProvider implements vscode.CodeActionProvider, vscode.Disposable { + public static readonly fixAllCodeActionKind = + vscode.CodeActionKind.SourceFixAll.append("csharpier"); - public static metadata: vscode.CodeActionProviderMetadata = { - providedCodeActionKinds: [FixAllCodeActionProvider.fixAllCodeActionKind], - }; - - private readonly codeActionsProvider: vscode.Disposable; + public static metadata: vscode.CodeActionProviderMetadata = { + providedCodeActionKinds: [FixAllCodeActionProvider.fixAllCodeActionKind], + }; - constructor(private readonly documentSelector: vscode.DocumentSelector) { - this.codeActionsProvider = vscode.languages.registerCodeActionsProvider( - this.documentSelector, - this, - FixAllCodeActionProvider.metadata - ); - } + private readonly codeActionsProvider: vscode.Disposable; - public dispose() { - this.codeActionsProvider.dispose(); - } + constructor(private readonly documentSelector: vscode.DocumentSelector) { + this.codeActionsProvider = vscode.languages.registerCodeActionsProvider( + this.documentSelector, + this, + FixAllCodeActionProvider.metadata, + ); + } - public provideCodeActions( - document: vscode.TextDocument, - _range: vscode.Range | vscode.Selection, - context: vscode.CodeActionContext, - cancellationToken: vscode.CancellationToken - ): vscode.CodeAction[] { - if (!context.only) { - return noChanges; + public dispose() { + this.codeActionsProvider.dispose(); } - if ( - !context.only.contains(FixAllCodeActionProvider.fixAllCodeActionKind) && - !FixAllCodeActionProvider.fixAllCodeActionKind.contains(context.only) - ) { - return noChanges; + + public provideCodeActions( + document: vscode.TextDocument, + _range: vscode.Range | vscode.Selection, + context: vscode.CodeActionContext, + cancellationToken: vscode.CancellationToken, + ): vscode.CodeAction[] { + if (!context.only) { + return noChanges; + } + if ( + !context.only.contains(FixAllCodeActionProvider.fixAllCodeActionKind) && + !FixAllCodeActionProvider.fixAllCodeActionKind.contains(context.only) + ) { + return noChanges; + } + const title = "Format code using CSharpier"; + const action = new vscode.CodeAction(title, FixAllCodeActionProvider.fixAllCodeActionKind); + action.command = { + title, + command: FixAllCodeActionsCommand.Id, + arguments: [document, cancellationToken], + }; + return [action]; } - const title = 'Format code using CSharpier'; - const action = new vscode.CodeAction( - title, - FixAllCodeActionProvider.fixAllCodeActionKind - ); - action.command = { - title, - command: FixAllCodeActionsCommand.Id, - arguments: [document, cancellationToken], - }; - return [action]; - } }