@@ -13,15 +13,15 @@ import {
1313 tsCodegen ,
1414 type VueVirtualCode ,
1515} from '@vue/language-core' ;
16- import { camelize , capitalize } from '@vue/shared' ;
16+ import { camelize , capitalize , isPromise } from '@vue/shared' ;
1717import type { ComponentPropInfo } from '@vue/typescript-plugin/lib/requests/getComponentProps' ;
18- import { create as createHtmlService } from 'volar-service-html' ;
18+ import { create as createHtmlService , resolveReference } from 'volar-service-html' ;
1919import { create as createPugService } from 'volar-service-pug' ;
2020import * as html from 'vscode-html-languageservice' ;
2121import { URI , Utils } from 'vscode-uri' ;
2222import { loadModelModifiersData , loadTemplateData } from '../data' ;
2323import { AttrNameCasing , checkCasing , TagNameCasing } from '../nameCasing' ;
24- import { resolveEmbeddedCode } from '../utils' ;
24+ import { createReferenceResolver , resolveEmbeddedCode } from '../utils' ;
2525
2626const specialTags = new Set ( [
2727 'slot' ,
@@ -45,11 +45,12 @@ export function create(
4545 languageId : 'html' | 'jade' ,
4646 {
4747 getComponentNames,
48- getElementAttrs,
4948 getComponentProps,
5049 getComponentEvents,
5150 getComponentDirectives,
5251 getComponentSlots,
52+ getElementAttrs,
53+ resolveModuleName,
5354 } : import ( '@vue/typescript-plugin/lib/requests' ) . Requests ,
5455) : LanguageServicePlugin {
5556 let customData : html . IHTMLDataProvider [ ] = [ ] ;
@@ -78,6 +79,11 @@ export function create(
7879 : createHtmlService ( {
7980 documentSelector : [ 'html' , 'markdown' ] ,
8081 useDefaultDataProvider : false ,
82+ getDocumentContext ( context ) {
83+ return {
84+ resolveReference : createReferenceResolver ( context , resolveReference , resolveModuleName ) as any ,
85+ } ;
86+ } ,
8187 getCustomData ( ) {
8288 return [
8389 ...customData ,
@@ -362,6 +368,25 @@ export function create(
362368
363369 return baseServiceInstance . provideHover ?.( document , position , token ) ;
364370 } ,
371+
372+ async provideDocumentLinks ( document , token ) {
373+ if ( document . languageId !== languageId ) {
374+ return ;
375+ }
376+ const info = resolveEmbeddedCode ( context , document . uri ) ;
377+ if ( info ?. code . id !== 'template' ) {
378+ return ;
379+ }
380+
381+ const documentLinks = await baseServiceInstance . provideDocumentLinks ?.( document , token ) ?? [ ] ;
382+ for ( const link of documentLinks ) {
383+ if ( link . target && isPromise ( link . target ) ) {
384+ link . target = await link . target ;
385+ }
386+ }
387+
388+ return documentLinks ;
389+ } ,
365390 } ;
366391
367392 async function runWithVueData < T > ( sourceDocumentUri : URI , root : VueVirtualCode , fn : ( ) => T ) {
0 commit comments