@@ -15,8 +15,84 @@ export function preprocessLanguageService(
1515 languageService : ts . LanguageService ,
1616 getLanguage : ( ) => Language < any > | undefined ,
1717) {
18- const { getCompletionsAtPosition, getCodeFixesAtPosition } = languageService ;
18+ const {
19+ getQuickInfoAtPosition,
20+ getSuggestionDiagnostics,
21+ getCompletionsAtPosition,
22+ getCodeFixesAtPosition,
23+ } = languageService ;
1924
25+ languageService . getQuickInfoAtPosition = ( fileName , position , maximumLength ) => {
26+ let result = getQuickInfoAtPosition ( fileName , position , maximumLength ) ;
27+ const language = getLanguage ( ) ;
28+ if ( result && language ) {
29+ const [ serviceScript , targetScript , sourceScript ] = getServiceScript ( language , fileName ) ;
30+ if ( serviceScript && sourceScript ?. generated ?. root instanceof VueVirtualCode ) {
31+ for (
32+ const sourceOffset of toSourceOffsets (
33+ sourceScript ,
34+ language ,
35+ serviceScript ,
36+ position ,
37+ ( ) => true ,
38+ )
39+ ) {
40+ const generatedOffset2 = toGeneratedOffset (
41+ language ,
42+ serviceScript ,
43+ sourceScript ,
44+ sourceOffset [ 1 ] ,
45+ ( data : VueCodeInformation ) => ! ! data . __importCompletion ,
46+ ) ;
47+ if ( generatedOffset2 !== undefined ) {
48+ const extraInfo = getQuickInfoAtPosition ( targetScript . id , generatedOffset2 , maximumLength ) ;
49+ if ( extraInfo ) {
50+ result . tags ??= [ ] ;
51+ result . tags . push ( ...extraInfo . tags ?? [ ] ) ;
52+ }
53+ }
54+ }
55+ }
56+ }
57+ return result ;
58+ } ;
59+ languageService . getSuggestionDiagnostics = fileName => {
60+ const diagnostics = getSuggestionDiagnostics ( fileName ) ;
61+ const language = getLanguage ( ) ;
62+ if ( language ) {
63+ const [ serviceScript , _targetScript , sourceScript ] = getServiceScript ( language , fileName ) ;
64+ if ( serviceScript && sourceScript ?. generated ?. root instanceof VueVirtualCode ) {
65+ for ( const diagnostic of diagnostics ) {
66+ for (
67+ const sourceRange of toSourceRanges (
68+ sourceScript ,
69+ language ,
70+ serviceScript ,
71+ diagnostic . start ,
72+ diagnostic . start + diagnostic . length ,
73+ true ,
74+ ( data : VueCodeInformation ) => ! ! data . __importCompletion ,
75+ )
76+ ) {
77+ const generateRange2 = toGeneratedRange (
78+ language ,
79+ serviceScript ,
80+ sourceScript ,
81+ sourceRange [ 1 ] ,
82+ sourceRange [ 2 ] ,
83+ ( data : VueCodeInformation ) => ! data . __importCompletion ,
84+ ) ;
85+ if ( generateRange2 !== undefined ) {
86+ diagnostic . start = generateRange2 [ 0 ] ;
87+ diagnostic . length = generateRange2 [ 1 ] - generateRange2 [ 0 ] ;
88+ break ;
89+ }
90+ }
91+ }
92+ }
93+ }
94+ return diagnostics ;
95+ } ;
2096 languageService . getCompletionsAtPosition = ( fileName , position , preferences , formatOptions ) => {
2197 let result = getCompletionsAtPosition ( fileName , position , preferences , formatOptions ) ;
2298 const language = getLanguage ( ) ;
0 commit comments