1- import { transformFileTextChanges } from '@volar/typescript/lib/node/transform.js' ;
1+ import { toGeneratedRange , toSourceRanges , transformFileTextChanges } from '@volar/typescript/lib/node/transform.js' ;
2+ import { getServiceScript } from '@volar/typescript/lib/node/utils.js' ;
23import { createLanguageServicePlugin } from '@volar/typescript/lib/quickstart/createLanguageServicePlugin' ;
34import * as core from '@vue/language-core' ;
45import type * as ts from 'typescript' ;
@@ -20,6 +21,42 @@ const projectToOriginalLanguageService = new WeakMap<ts.server.Project, ts.Langu
2021
2122export = createLanguageServicePlugin (
2223 ( ts , info ) => {
24+ let _language : core . Language < string > | undefined ;
25+ const { getCodeFixesAtPosition } = info . languageService ;
26+ info . languageService . getCodeFixesAtPosition = ( fileName , start , end , errorCodes , formatOptions , preferences ) => {
27+ let fixes = getCodeFixesAtPosition ( fileName , start , end , errorCodes , formatOptions , preferences ) ;
28+ if ( _language ) {
29+ const [ serviceScript , targetScript , sourceScript ] = getServiceScript ( _language , fileName ) ;
30+ if ( serviceScript && sourceScript ?. generated ?. root instanceof core . VueVirtualCode ) {
31+ for (
32+ const sourceRange of toSourceRanges ( sourceScript , _language , serviceScript , start , end , true , ( ) => true )
33+ ) {
34+ const generateRange2 = toGeneratedRange (
35+ _language ,
36+ serviceScript ,
37+ sourceScript ,
38+ sourceRange [ 1 ] ,
39+ sourceRange [ 2 ] ,
40+ ( data : core . VueCodeInformation ) => typeof data . completion === 'object' && ! ! data . completion . isAdditional ,
41+ ) ;
42+ if ( generateRange2 !== undefined ) {
43+ let importFixes = getCodeFixesAtPosition (
44+ targetScript . id ,
45+ generateRange2 [ 0 ] ,
46+ generateRange2 [ 1 ] ,
47+ [ 2304 ] , // Cannot find name 'xxx'.ts(2304)
48+ formatOptions ,
49+ preferences ,
50+ ) ;
51+ importFixes = importFixes . filter ( fix => fix . fixName === 'import' ) ;
52+ fixes = fixes . concat ( importFixes ) ;
53+ }
54+ }
55+ }
56+ }
57+ return fixes ;
58+ } ;
59+
2360 projectToOriginalLanguageService . set ( info . project , info . languageService ) ;
2461
2562 const vueOptions = getVueCompilerOptions ( ) ;
@@ -35,6 +72,7 @@ export = createLanguageServicePlugin(
3572 return {
3673 languagePlugins : [ languagePlugin ] ,
3774 setup : language => {
75+ _language = language ;
3876 info . languageService = createVueLanguageServiceProxy (
3977 ts ,
4078 language ,
0 commit comments