@@ -4,6 +4,7 @@ import dts from "@App/types/scriptcat";
44import Hook from "@App/app/service/hook" ;
55import { languages } from "monaco-editor" ;
66import pako from "pako" ;
7+ import Cache from "@App/app/cache" ;
78
89// 注册eslint
910const linterWorker = new Worker ( "/src/linter.worker.js" ) ;
@@ -74,6 +75,73 @@ export default function registerEditor() {
7475 } ) ;
7576 } ,
7677 } ) ;
78+
79+ // 处理quick fix
80+ languages . registerCodeActionProvider ( "javascript" , {
81+ provideCodeActions : (
82+ model /** ITextModel */ ,
83+ range /** Range */ ,
84+ context /** CodeActionContext */
85+ ) => {
86+ const actions : languages . CodeAction [ ] = [ ] ;
87+ const eslintFix = < Map < string , any > > Cache . getInstance ( ) . get ( "eslint-fix" ) ;
88+ for ( let i = 0 ; i < context . markers . length ; i += 1 ) {
89+ // 判断有没有修复方案
90+ const val = context . markers [ i ] ;
91+ const code = typeof val . code === "string" ? val . code : val . code ! . value ;
92+ const fix = eslintFix . get (
93+ `${ code } |${ val . startLineNumber } |${ val . endLineNumber } |${ val . startColumn } |${ val . endColumn } `
94+ ) ;
95+ console . log (
96+ fix ,
97+ `${ code } |${ val . startLineNumber } |${ val . endLineNumber } |${ val . startColumn } |${ val . endColumn } `
98+ ) ;
99+ if ( fix ) {
100+ const edit : languages . IWorkspaceTextEdit = {
101+ resource : model . uri ,
102+ textEdit : {
103+ range : fix . range ,
104+ text : fix . text ,
105+ } ,
106+ versionId : undefined ,
107+ } ;
108+ actions . push ( < languages . CodeAction > {
109+ title : `修复 ${ code } 问题` ,
110+ diagnostics : [ val ] ,
111+ kind : "quickfix" ,
112+ edit : {
113+ edits : [ edit ] ,
114+ } ,
115+ isPreferred : true ,
116+ } ) ;
117+ }
118+ }
119+
120+ // const actions = context.markers.map((error) => {
121+ // const edit: languages.IWorkspaceTextEdit = {
122+ // resource: model.uri,
123+ // textEdit: {
124+ // range,
125+ // text: "console.log(1)",
126+ // },
127+ // versionId: undefined,
128+ // };
129+ // return <languages.CodeAction>{
130+ // title: ``,
131+ // diagnostics: [error],
132+ // kind: "quickfix",
133+ // edit: {
134+ // edits: [edit],
135+ // },
136+ // isPreferred: true,
137+ // };
138+ // });
139+ return {
140+ actions,
141+ dispose : ( ) => { } ,
142+ } ;
143+ } ,
144+ } ) ;
77145}
78146
79147export class LinterWorker {
0 commit comments