@@ -8011,10 +8011,10 @@ new C();`
80118011 checkCompleteEvent ( session , 2 , expectedSequenceId ) ;
80128012 }
80138013
8014- function verifyWatchedFilesAndDirectories ( host : TestServerHost , files : string [ ] , directories : string [ ] ) {
8014+ function verifyWatchedFilesAndDirectories ( host : TestServerHost , files : string [ ] , recursiveDirectories : string [ ] , nonRecursiveDirectories : string [ ] ) {
80158015 checkWatchedFilesDetailed ( host , files . filter ( f => f !== recognizersDateTimeSrcFile . path ) , 1 ) ;
8016- checkWatchedDirectories ( host , emptyArray , /*recursive*/ false ) ;
8017- checkWatchedDirectoriesDetailed ( host , directories , 1 , /*recursive*/ true ) ;
8016+ checkWatchedDirectoriesDetailed ( host , nonRecursiveDirectories , 1 , /*recursive*/ false ) ;
8017+ checkWatchedDirectoriesDetailed ( host , recursiveDirectories , 1 , /*recursive*/ true ) ;
80188018 }
80198019
80208020 function createSessionAndOpenFile ( host : TestServerHost ) {
@@ -8035,22 +8035,23 @@ new C();`
80358035 const filesWithNodeModulesSetup = [ ...filesWithSources , nodeModulesRecorgnizersText ] ;
80368036 const filesAfterCompilation = [ ...filesWithNodeModulesSetup , recongnizerTextDistTypingFile ] ;
80378037
8038- const watchedDirectoriesWithResolvedModule = [ `${ recognizersDateTime } /src` , withPathMapping ? packages : recognizersDateTime , ...getTypeRootsFromLocation ( recognizersDateTime ) ] ;
8038+ const watchedDirectoriesWithResolvedModule = [ `${ recognizersDateTime } /src` , ... ( withPathMapping ? emptyArray : [ recognizersDateTime ] ) , ...getTypeRootsFromLocation ( recognizersDateTime ) ] ;
80398039 const watchedDirectoriesWithUnresolvedModule = [ recognizersDateTime , ...( withPathMapping ? [ recognizersText ] : emptyArray ) , ...watchedDirectoriesWithResolvedModule , ...getNodeModuleDirectories ( packages ) ] ;
8040+ const nonRecursiveWatchedDirectories = withPathMapping ? [ packages ] : emptyArray ;
80408041
80418042 function verifyProjectWithResolvedModule ( session : TestSession ) {
80428043 const projectService = session . getProjectService ( ) ;
80438044 const project = projectService . configuredProjects . get ( recognizerDateTimeTsconfigPath ) ! ;
80448045 checkProjectActualFiles ( project , filesInProjectWithResolvedModule ) ;
8045- verifyWatchedFilesAndDirectories ( session . host , filesInProjectWithResolvedModule , watchedDirectoriesWithResolvedModule ) ;
8046+ verifyWatchedFilesAndDirectories ( session . host , filesInProjectWithResolvedModule , watchedDirectoriesWithResolvedModule , nonRecursiveWatchedDirectories ) ;
80468047 verifyErrors ( session , [ ] ) ;
80478048 }
80488049
80498050 function verifyProjectWithUnresolvedModule ( session : TestSession ) {
80508051 const projectService = session . getProjectService ( ) ;
80518052 const project = projectService . configuredProjects . get ( recognizerDateTimeTsconfigPath ) ! ;
80528053 checkProjectActualFiles ( project , filesInProjectWithUnresolvedModule ) ;
8053- verifyWatchedFilesAndDirectories ( session . host , filesInProjectWithUnresolvedModule , watchedDirectoriesWithUnresolvedModule ) ;
8054+ verifyWatchedFilesAndDirectories ( session . host , filesInProjectWithUnresolvedModule , watchedDirectoriesWithUnresolvedModule , nonRecursiveWatchedDirectories ) ;
80548055 const startOffset = recognizersDateTimeSrcFile . content . indexOf ( '"' ) + 1 ;
80558056 verifyErrors ( session , [
80568057 createDiagnostic ( { line : 1 , offset : startOffset } , { line : 1 , offset : startOffset + moduleNameInFile . length } , Diagnostics . Cannot_find_module_0 , [ moduleName ] )
@@ -8506,6 +8507,65 @@ new C();`
85068507 }
85078508 } ) ;
85088509 } ) ;
8510+
8511+ it ( "when watching directories for failed lookup locations in amd resolution" , ( ) => {
8512+ const projectRoot = "/user/username/projects/project" ;
8513+ const nodeFile : File = {
8514+ path : `${ projectRoot } /src/typings/node.d.ts` ,
8515+ content : `
8516+ declare module "fs" {
8517+ export interface something {
8518+ }
8519+ }`
8520+ } ;
8521+ const electronFile : File = {
8522+ path : `${ projectRoot } /src/typings/electron.d.ts` ,
8523+ content : `
8524+ declare module 'original-fs' {
8525+ import * as fs from 'fs';
8526+ export = fs;
8527+ }`
8528+ } ;
8529+ const srcFile : File = {
8530+ path : `${ projectRoot } /src/somefolder/srcfile.ts` ,
8531+ content : `
8532+ import { x } from "somefolder/module1";
8533+ import { x } from "somefolder/module2";
8534+ const y = x;`
8535+ } ;
8536+ const moduleFile : File = {
8537+ path : `${ projectRoot } /src/somefolder/module1.ts` ,
8538+ content : `
8539+ export const x = 10;`
8540+ } ;
8541+ const configFile : File = {
8542+ path : `${ projectRoot } /src/tsconfig.json` ,
8543+ content : JSON . stringify ( {
8544+ compilerOptions : {
8545+ module : "amd" ,
8546+ moduleResolution : "classic" ,
8547+ target : "es5" ,
8548+ outDir : "../out" ,
8549+ baseUrl : "./" ,
8550+ typeRoots : [ "typings" ]
8551+
8552+ }
8553+ } )
8554+ } ;
8555+ const files = [ nodeFile , electronFile , srcFile , moduleFile , configFile , libFile ] ;
8556+ const host = createServerHost ( files ) ;
8557+ const service = createProjectService ( host ) ;
8558+ service . openClientFile ( srcFile . path , srcFile . content , ScriptKind . TS , projectRoot ) ;
8559+ checkProjectActualFiles ( service . configuredProjects . get ( configFile . path ) ! , files . map ( f => f . path ) ) ;
8560+ checkWatchedFilesDetailed ( host , mapDefined ( files , f => f === srcFile ? undefined : f . path ) , 1 ) ;
8561+ checkWatchedDirectoriesDetailed ( host , [ `${ projectRoot } ` ] , 1 , /*recursive*/ false ) ; // failed lookup for fs
8562+ const expectedWatchedDirectories = createMap < number > ( ) ;
8563+ expectedWatchedDirectories . set ( `${ projectRoot } /src` , 2 ) ; // Wild card and failed lookup
8564+ expectedWatchedDirectories . set ( `${ projectRoot } /somefolder` , 1 ) ; // failed lookup for somefolder/module2
8565+ expectedWatchedDirectories . set ( `${ projectRoot } /node_modules` , 1 ) ; // failed lookup for with node_modules/@types /fs
8566+ expectedWatchedDirectories . set ( `${ projectRoot } /src/typings` , 1 ) ; // typeroot directory
8567+ checkWatchedDirectoriesDetailed ( host , expectedWatchedDirectories , /*recursive*/ true ) ;
8568+ } ) ;
85098569 } ) ;
85108570
85118571 describe ( "tsserverProjectSystem watchDirectories implementation" , ( ) => {
0 commit comments