From c3d1e3c69c9989264ca392de8b35fc28d8decb93 Mon Sep 17 00:00:00 2001 From: Aniket-Engg Date: Tue, 18 Jul 2023 14:15:56 +0530 Subject: [PATCH] code action provider for quick fix --- .../src/lib/providers/codeActionProvider.ts | 47 +++++++++++++++++++ .../editor/src/lib/remix-ui-editor.tsx | 2 + 2 files changed, 49 insertions(+) create mode 100644 libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts diff --git a/libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts b/libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts new file mode 100644 index 0000000000..46c73b8f1f --- /dev/null +++ b/libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts @@ -0,0 +1,47 @@ +import { Monaco } from "@monaco-editor/react" +import monaco from "../../types/monaco" +import { EditorUIProps } from "../remix-ui-editor" + +export class RemixCodeActionProvider implements monaco.languages.CodeActionProvider { + props: EditorUIProps + monaco: Monaco + constructor(props: any, monaco: any) { + this.props = props + this.monaco = monaco + } + + async provideCodeActions ( + model /**ITextModel*/, + range /**Range*/, + context /**CodeActionContext*/, + token /**CancellationToken*/ + ) { + + const actions = context.markers.map(error => { + console.log('error------>', error) + return { + title: `Example quick fix`, + diagnostics: [error], + kind: "quickfix", + edit: { + edits: [ + { + resource: model.uri, + edits: [ + { + range: error, + text: "This text replaces the text with the error" + } + ] + } + ] + }, + isPreferred: true + }; + }); + return { + actions: actions, + dispose: () => {} + } + } +} \ No newline at end of file diff --git a/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx b/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx index ee614eddaa..e4c49dfa8a 100644 --- a/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx +++ b/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx @@ -15,6 +15,7 @@ import { RemixReferenceProvider } from './providers/referenceProvider' import { RemixCompletionProvider } from './providers/completionProvider' import { RemixHighLightProvider } from './providers/highlightProvider' import { RemixDefinitionProvider } from './providers/definitionProvider' +import { RemixCodeActionProvider } from './providers/codeActionProvider' import './remix-ui-editor.css' @@ -749,6 +750,7 @@ export const EditorUI = (props: EditorUIProps) => { monacoRef.current.languages.registerReferenceProvider('remix-solidity', new RemixReferenceProvider(props, monaco)) monacoRef.current.languages.registerHoverProvider('remix-solidity', new RemixHoverProvider(props, monaco)) monacoRef.current.languages.registerCompletionItemProvider('remix-solidity', new RemixCompletionProvider(props, monaco)) + monaco.languages.registerCodeActionProvider("remix-solidity", new RemixCodeActionProvider(props, monaco)) loadTypes(monacoRef.current) }