@@ -86,17 +86,19 @@ namespace ts.server {
8686 export class LSHost implements ts . LanguageServiceHost {
8787 ls : ts . LanguageService = null ;
8888 compilationSettings : ts . CompilerOptions ;
89- filenameToScript : ts . Map < ScriptInfo > = { } ;
89+ filenameToScript : ts . FileMap < ScriptInfo > ;
9090 roots : ScriptInfo [ ] = [ ] ;
9191 private resolvedModuleNames : ts . FileMap < Map < TimestampedResolvedModule > > ;
9292 private moduleResolutionHost : ts . ModuleResolutionHost ;
9393
9494 constructor ( public host : ServerHost , public project : Project ) {
95- this . resolvedModuleNames = ts . createFileMap < Map < TimestampedResolvedModule > > ( ts . createGetCanonicalFileName ( host . useCaseSensitiveFileNames ) )
95+ var getCanonicalFileName = createGetCanonicalFileName ( host . useCaseSensitiveFileNames ) ;
96+ this . resolvedModuleNames = createFileMap < Map < TimestampedResolvedModule > > ( getCanonicalFileName ) ;
97+ this . filenameToScript = createFileMap < ScriptInfo > ( getCanonicalFileName ) ;
9698 this . moduleResolutionHost = {
9799 fileExists : fileName => this . fileExists ( fileName ) ,
98100 readFile : fileName => this . host . readFile ( fileName )
99- }
101+ } ;
100102 }
101103
102104 resolveModuleNames ( moduleNames : string [ ] , containingFile : string ) : ResolvedModule [ ] {
@@ -199,36 +201,32 @@ namespace ts.server {
199201
200202 removeReferencedFile ( info : ScriptInfo ) {
201203 if ( ! info . isOpen ) {
202- this . filenameToScript [ info . fileName ] = undefined ;
204+ this . filenameToScript . remove ( info . fileName ) ;
203205 this . resolvedModuleNames . remove ( info . fileName ) ;
204206 }
205207 }
206208
207209 getScriptInfo ( filename : string ) : ScriptInfo {
208- var scriptInfo = ts . lookUp ( this . filenameToScript , filename ) ;
210+ var scriptInfo = this . filenameToScript . get ( filename ) ;
209211 if ( ! scriptInfo ) {
210212 scriptInfo = this . project . openReferencedFile ( filename ) ;
211213 if ( scriptInfo ) {
212- this . filenameToScript [ scriptInfo . fileName ] = scriptInfo ;
214+ this . filenameToScript . set ( scriptInfo . fileName , scriptInfo ) ;
213215 }
214216 }
215- else {
216- }
217217 return scriptInfo ;
218218 }
219219
220220 addRoot ( info : ScriptInfo ) {
221- var scriptInfo = ts . lookUp ( this . filenameToScript , info . fileName ) ;
222- if ( ! scriptInfo ) {
223- this . filenameToScript [ info . fileName ] = info ;
221+ if ( ! this . filenameToScript . contains ( info . fileName ) ) {
222+ this . filenameToScript . set ( info . fileName , info ) ;
224223 this . roots . push ( info ) ;
225224 }
226225 }
227226
228227 removeRoot ( info : ScriptInfo ) {
229- var scriptInfo = ts . lookUp ( this . filenameToScript , info . fileName ) ;
230- if ( scriptInfo ) {
231- this . filenameToScript [ info . fileName ] = undefined ;
228+ if ( ! this . filenameToScript . contains ( info . fileName ) ) {
229+ this . filenameToScript . remove ( info . fileName ) ;
232230 this . roots = copyListRemovingItem ( info , this . roots ) ;
233231 this . resolvedModuleNames . remove ( info . fileName ) ;
234232 }
@@ -279,7 +277,7 @@ namespace ts.server {
279277 * @param line 1 based index
280278 */
281279 lineToTextSpan ( filename : string , line : number ) : ts . TextSpan {
282- var script : ScriptInfo = this . filenameToScript [ filename ] ;
280+ var script : ScriptInfo = this . filenameToScript . get ( filename ) ;
283281 var index = script . snap ( ) . index ;
284282
285283 var lineInfo = index . lineNumberToInfo ( line + 1 ) ;
@@ -299,7 +297,7 @@ namespace ts.server {
299297 * @param offset 1 based index
300298 */
301299 lineOffsetToPosition ( filename : string , line : number , offset : number ) : number {
302- var script : ScriptInfo = this . filenameToScript [ filename ] ;
300+ var script : ScriptInfo = this . filenameToScript . get ( filename ) ;
303301 var index = script . snap ( ) . index ;
304302
305303 var lineInfo = index . lineNumberToInfo ( line ) ;
@@ -312,7 +310,7 @@ namespace ts.server {
312310 * @param offset 1-based index
313311 */
314312 positionToLineOffset ( filename : string , position : number ) : ILineInfo {
315- var script : ScriptInfo = this . filenameToScript [ filename ] ;
313+ var script : ScriptInfo = this . filenameToScript . get ( filename ) ;
316314 var index = script . snap ( ) . index ;
317315 var lineOffset = index . charOffsetToLineNumberAndPos ( position ) ;
318316 return { line : lineOffset . line , offset : lineOffset . offset + 1 } ;
@@ -386,7 +384,7 @@ namespace ts.server {
386384 }
387385
388386 getFileNames ( ) {
389- let sourceFiles = this . program . getSourceFiles ( ) ;
387+ var sourceFiles = this . program . getSourceFiles ( ) ;
390388 return sourceFiles . map ( sourceFile => sourceFile . fileName ) ;
391389 }
392390
0 commit comments