11import type { LanguagePlugin , ProviderResult , ServerBase , ServerProject , ServerProjectProvider , TypeScriptProjectHost } from '@volar/language-server' ;
22import { createSimpleServerProject } from '@volar/language-server/lib/project/simpleProject' ;
33import { createServiceEnvironment , getWorkspaceFolder } from '@volar/language-server/lib/project/simpleProjectProvider' ;
4- import { FileMap , createLanguage } from '@vue/language-core' ;
4+ import { createUriMap } from '@volar/language-server/lib/utils/uriMap' ;
5+ import { createLanguage } from '@vue/language-core' ;
56import { Disposable , LanguageService , ServiceEnvironment , createLanguageService } from '@vue/language-service' ;
67import { searchNamedPipeServerForFile } from '@vue/typescript-plugin/lib/utils' ;
78import type * as ts from 'typescript' ;
9+ import { URI } from 'vscode-uri' ;
810
911export type GetLanguagePlugin = (
1012 serviceEnv : ServiceEnvironment ,
@@ -22,17 +24,18 @@ export function createHybridModeProjectProviderFactory(
2224) : ServerProjectProvider {
2325 let initialized = false ;
2426
25- const serviceEnvs = new FileMap < ServiceEnvironment > ( sys . useCaseSensitiveFileNames ) ;
26- const tsconfigProjects = new FileMap < Promise < ServerProject > > ( sys . useCaseSensitiveFileNames ) ;
27- const simpleProjects = new FileMap < Promise < ServerProject > > ( sys . useCaseSensitiveFileNames ) ;
27+ const serviceEnvs = createUriMap < ServiceEnvironment > ( sys . useCaseSensitiveFileNames ) ;
28+ const tsconfigProjects = createUriMap < Promise < ServerProject > > ( sys . useCaseSensitiveFileNames ) ;
29+ const simpleProjects = createUriMap < Promise < ServerProject > > ( sys . useCaseSensitiveFileNames ) ;
2830
2931 return {
3032 async get ( uri ) : Promise < ServerProject > {
3133 if ( ! initialized ) {
3234 initialized = true ;
3335 initialize ( this ) ;
3436 }
35- const workspaceFolder = getWorkspaceFolder ( uri , this . workspaceFolders ) ;
37+ const parsedUri = URI . parse ( uri ) ;
38+ const workspaceFolder = getWorkspaceFolder ( parsedUri , this . workspaceFolders ) ;
3639 let serviceEnv = serviceEnvs . get ( workspaceFolder ) ;
3740 if ( ! serviceEnv ) {
3841 serviceEnv = createServiceEnvironment ( this , workspaceFolder ) ;
@@ -42,7 +45,7 @@ export function createHybridModeProjectProviderFactory(
4245 const projectInfo = ( await searchNamedPipeServerForFile ( fileName ) ) ?. projectInfo ;
4346 if ( projectInfo ?. kind === 1 ) {
4447 const tsconfig = projectInfo . name ;
45- const tsconfigUri = serviceEnv . typescript ! . fileNameToUri ( tsconfig ) ;
48+ const tsconfigUri = URI . parse ( serviceEnv . typescript ! . fileNameToUri ( tsconfig ) ) ;
4649 if ( ! tsconfigProjects . has ( tsconfigUri ) ) {
4750 tsconfigProjects . set ( tsconfigUri , ( async ( ) => {
4851 const languagePlugins = await getLanguagePlugins ( serviceEnv , tsconfig , undefined , {
@@ -89,9 +92,10 @@ export function createHybridModeProjectProviderFactory(
8992 function initialize ( server : ServerBase ) {
9093 server . onDidChangeWatchedFiles ( ( { changes } ) => {
9194 for ( const change of changes ) {
92- if ( tsconfigProjects . has ( change . uri ) ) {
93- tsconfigProjects . get ( change . uri ) ?. then ( project => project . dispose ( ) ) ;
94- tsconfigProjects . delete ( change . uri ) ;
95+ const changeUri = URI . parse ( change . uri ) ;
96+ if ( tsconfigProjects . has ( changeUri ) ) {
97+ tsconfigProjects . get ( changeUri ) ?. then ( project => project . dispose ( ) ) ;
98+ tsconfigProjects . delete ( changeUri ) ;
9599 server . clearPushDiagnostics ( ) ;
96100 }
97101 }
0 commit comments