diff --git a/.gitignore b/.gitignore index b084ac14ecc28..54604cdbd35a3 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ tests/baselines/rwc/* tests/baselines/reference/projectOutput/* tests/baselines/local/projectOutput/* tests/baselines/reference/testresults.tap +tests/baselines/symlinks/* tests/services/baselines/prototyping/local/* tests/services/browser/typescriptServices.js src/harness/*.js diff --git a/src/harness/harnessLanguageService.ts b/src/harness/harnessLanguageService.ts index 3bab845bbdd7c..122a102fff449 100644 --- a/src/harness/harnessLanguageService.ts +++ b/src/harness/harnessLanguageService.ts @@ -398,6 +398,7 @@ class SessionServerHost implements ts.server.ServerHost { "watchedFiles", "watchedDirectories", ts.createGetCanonicalFileName(this.useCaseSensitiveFileNames), + this, ); constructor(private host: NativeLanguageServiceHost) { diff --git a/src/harness/watchUtils.ts b/src/harness/watchUtils.ts index 8e9a1bc552d3b..fd0201f28b20f 100644 --- a/src/harness/watchUtils.ts +++ b/src/harness/watchUtils.ts @@ -1,5 +1,4 @@ import { - addRange, arrayFrom, compareStringsCaseSensitive, contains, @@ -10,6 +9,7 @@ import { GetCanonicalFileName, MultiMap, PollingInterval, + System, } from "./_namespaces/ts"; export interface TestFileWatcher { @@ -25,7 +25,7 @@ export interface TestFsWatcher { export interface Watches { add(path: string, data: Data): void; remove(path: string, data: Data): void; - forEach(path: string, cb: (data: Data) => void): void; + forEach(path: string, cb: (data: Data, path: string) => void): void; serialize(baseline: string[]): void; } @@ -44,6 +44,7 @@ export function createWatchUtils( pollingWatchesName: string, fsWatchesName: string, getCanonicalFileName: GetCanonicalFileName, + system: Required>, ): WatchUtils { const pollingWatches = initializeWatches(pollingWatchesName); const fsWatches = initializeWatches(fsWatchesName); @@ -64,6 +65,8 @@ export function createWatchUtils( const actuals = createMultiMap(); let serialized: Map | undefined; let canonicalPathsToStrings: Map> | undefined; + let realToLinked: MultiMap | undefined; + let pathToReal: Map | undefined; return { add, remove, @@ -73,40 +76,69 @@ export function createWatchUtils( function add(path: string, data: Data) { actuals.add(path, data); - if (actuals.get(path)!.length === 1) { - const canonicalPath = getCanonicalFileName(path); - if (canonicalPath !== path) { - (canonicalPathsToStrings ??= new Map()).set( - canonicalPath, - (canonicalPathsToStrings?.get(canonicalPath) ?? new Set()).add(path), - ); - } + if (actuals.get(path)!.length !== 1) return; + const canonicalPath = getCanonicalFileName(path); + if (canonicalPath !== path) { + (canonicalPathsToStrings ??= new Map()).set( + canonicalPath, + (canonicalPathsToStrings?.get(canonicalPath) ?? new Set()).add(path), + ); + } + const real = system.realpath(path); + (pathToReal ??= new Map()).set(path, real); + if (real === path) return; + const canonicalReal = getCanonicalFileName(real); + if (getCanonicalFileName(path) !== canonicalReal) { + (realToLinked ??= createMultiMap()).add(canonicalReal, path); } } function remove(path: string, data: Data) { actuals.remove(path, data); - if (!actuals.has(path)) { - const canonicalPath = getCanonicalFileName(path); - if (canonicalPath !== path) { - const existing = canonicalPathsToStrings!.get(canonicalPath); - if (existing!.size === 1) canonicalPathsToStrings!.delete(canonicalPath); - else existing!.delete(path); - } + if (actuals.has(path)) return; + const canonicalPath = getCanonicalFileName(path); + if (canonicalPath !== path) { + const existing = canonicalPathsToStrings!.get(canonicalPath); + if (existing!.size === 1) canonicalPathsToStrings!.delete(canonicalPath); + else existing!.delete(path); + } + const real = pathToReal?.get(path)!; + pathToReal!.delete(path); + if (real === path) return; + const canonicalReal = getCanonicalFileName(real); + if (getCanonicalFileName(path) !== canonicalReal) { + realToLinked!.remove(canonicalReal, path); } } - function forEach(path: string, cb: (data: Data) => void) { - let allData: Data[] | undefined; - allData = addRange(allData, actuals.get(path)); + function getAllData(path: string) { + let allData: Map | undefined; + addData(path); const canonicalPath = getCanonicalFileName(path); - if (canonicalPath !== path) allData = addRange(allData, actuals.get(canonicalPath)); + if (canonicalPath !== path) addData(canonicalPath); canonicalPathsToStrings?.get(canonicalPath)?.forEach(canonicalSamePath => { if (canonicalSamePath !== path && canonicalSamePath !== canonicalPath) { - allData = addRange(allData, actuals.get(canonicalSamePath)); + addData(canonicalSamePath); } }); - allData?.forEach(cb); + return allData; + function addData(path: string) { + const data = actuals.get(path); + if (data) (allData ??= new Map()).set(path, data); + } + } + + function forEach(path: string, cb: (data: Data, path: string) => void) { + const real = system.realpath(path); + const canonicalPath = getCanonicalFileName(path); + const canonicalReal = getCanonicalFileName(real); + let allData = canonicalPath === canonicalReal ? getAllData(path) : getAllData(real); + realToLinked?.get(canonicalReal)?.forEach(linked => { + if (allData?.has(linked)) return; + const data = actuals.get(linked); + if (data) (allData ??= new Map()).set(linked, data); + }); + allData?.forEach((data, path) => data.forEach(d => cb(d, path))); } function serialize(baseline: string[]) { diff --git a/src/testRunner/tests.ts b/src/testRunner/tests.ts index 01d5ddea11d4d..9857f6b7fb2d7 100644 --- a/src/testRunner/tests.ts +++ b/src/testRunner/tests.ts @@ -65,6 +65,7 @@ import "./unittests/services/preProcessFile"; import "./unittests/services/textChanges"; import "./unittests/services/transpile"; import "./unittests/services/utilities"; +import "./unittests/sys/symlinkWatching"; import "./unittests/tsbuild/amdModulesWithOut"; import "./unittests/tsbuild/clean"; import "./unittests/tsbuild/commandLine"; diff --git a/src/testRunner/unittests/helpers/tscWatch.ts b/src/testRunner/unittests/helpers/tscWatch.ts index 554c3fc37b0f3..04e74a2977eb9 100644 --- a/src/testRunner/unittests/helpers/tscWatch.ts +++ b/src/testRunner/unittests/helpers/tscWatch.ts @@ -45,7 +45,6 @@ export interface TscWatchCompileChange, ) => void; // TODO:: sheetal: Needing these fields are technically issues that need to be fixed later - symlinksNotReflected?: readonly string[]; skipStructureCheck?: true; } export interface TscWatchCheckOptions { @@ -220,7 +219,7 @@ export function runWatchBaseline | undefined)?.getResolutionCache?.() : undefined, useSourceOfProjectReferenceRedirect, - symlinksNotReflected, }); } } @@ -254,7 +252,6 @@ export interface WatchBaseline extends BaselineBase, TscWatchCheckOptions { caption?: string; resolutionCache?: ts.ResolutionCache; useSourceOfProjectReferenceRedirect?: () => boolean; - symlinksNotReflected?: readonly string[]; } export function watchBaseline({ baseline, @@ -266,7 +263,6 @@ export function watchBaseline({ caption, resolutionCache, useSourceOfProjectReferenceRedirect, - symlinksNotReflected, }: WatchBaseline) { if (baselineSourceMap) generateSourceMapBaselineFiles(sys); const programs = getPrograms(); @@ -279,7 +275,13 @@ export function watchBaseline({ // Verify program structure and resolution cache when incremental edit with tsc --watch (without build mode) if (resolutionCache && programs.length) { ts.Debug.assert(programs.length === 1); - verifyProgramStructureAndResolutionCache(caption!, sys, programs[0][0], resolutionCache, useSourceOfProjectReferenceRedirect, symlinksNotReflected); + verifyProgramStructureAndResolutionCache( + caption!, + sys, + programs[0][0], + resolutionCache, + useSourceOfProjectReferenceRedirect, + ); } return programs; } @@ -289,23 +291,12 @@ function verifyProgramStructureAndResolutionCache( program: ts.Program, resolutionCache: ts.ResolutionCache, useSourceOfProjectReferenceRedirect?: () => boolean, - symlinksNotReflected?: readonly string[], ) { const options = program.getCompilerOptions(); const compilerHost = ts.createCompilerHostWorker(options, /*setParentNodes*/ undefined, sys); compilerHost.trace = ts.noop; compilerHost.writeFile = ts.notImplemented; compilerHost.useSourceOfProjectReferenceRedirect = useSourceOfProjectReferenceRedirect; - const readFile = compilerHost.readFile; - compilerHost.readFile = fileName => { - const text = readFile.call(compilerHost, fileName); - if (!ts.contains(symlinksNotReflected, fileName)) return text; - // Handle symlinks that dont reflect the watch change - ts.Debug.assert(sys.toPath(sys.realpath(fileName)) !== sys.toPath(fileName)); - const file = program.getSourceFile(fileName)!; - ts.Debug.assert(file.text !== text); - return file.text; - }; verifyProgramStructure( ts.createProgram({ rootNames: program.getRootFileNames(), diff --git a/src/testRunner/unittests/helpers/virtualFileSystemWithWatch.ts b/src/testRunner/unittests/helpers/virtualFileSystemWithWatch.ts index 3a3790f99c3d1..8dcfd1c453246 100644 --- a/src/testRunner/unittests/helpers/virtualFileSystemWithWatch.ts +++ b/src/testRunner/unittests/helpers/virtualFileSystemWithWatch.ts @@ -378,7 +378,7 @@ export class TestServerHost implements server.ServerHost, FormatDiagnosticsHost, this.environmentVariables = environmentVariables; currentDirectory = currentDirectory || "/"; this.getCanonicalFileName = createGetCanonicalFileName(!!useCaseSensitiveFileNames); - this.watchUtils = createWatchUtils("PolledWatches", "FsWatches", s => this.getCanonicalFileName(s)); + this.watchUtils = createWatchUtils("PolledWatches", "FsWatches", s => this.getCanonicalFileName(s), this); this.toPath = s => toPath(s, currentDirectory, this.getCanonicalFileName); this.executingFilePath = this.getHostSpecificPath(executingFilePath || getExecutingFilePathFromLibFile()); this.currentDirectory = this.getHostSpecificPath(currentDirectory); @@ -634,7 +634,7 @@ export class TestServerHost implements server.ServerHost, FormatDiagnosticsHost, const inodeWatching = this.inodeWatching; if (options?.skipInodeCheckOnCreate) this.inodeWatching = false; this.invokeFileAndFsWatches(fileOrDirectory.fullPath, FileWatcherEventKind.Created, fileOrDirectory.modifiedTime, options?.useTildeAsSuffixInRenameEventFileName); - this.invokeFileAndFsWatches(folder.fullPath, FileWatcherEventKind.Changed, fileOrDirectory.modifiedTime, options?.useTildeAsSuffixInRenameEventFileName); + this.invokeFileAndFsWatches(folder.fullPath, FileWatcherEventKind.Changed, folder.modifiedTime, options?.useTildeAsSuffixInRenameEventFileName); this.inodeWatching = inodeWatching; } @@ -658,14 +658,14 @@ export class TestServerHost implements server.ServerHost, FormatDiagnosticsHost, deleteFile(filePath: string) { const path = this.toFullPath(filePath); - const currentEntry = this.fs.get(path) as FsFile; + const currentEntry = this.fs.get(path); Debug.assert(isFsFile(currentEntry)); this.removeFileOrFolder(currentEntry); } deleteFolder(folderPath: string, recursive?: boolean) { const path = this.toFullPath(folderPath); - const currentEntry = this.fs.get(path) as FsFolder; + const currentEntry = this.fs.get(path); Debug.assert(isFsFolder(currentEntry)); if (recursive && currentEntry.entries.length) { const subEntries = currentEntry.entries.slice(); @@ -688,7 +688,7 @@ export class TestServerHost implements server.ServerHost, FormatDiagnosticsHost, ); } - private fsWatchWorker( + fsWatchWorker( fileOrDirectory: string, recursive: boolean, cb: FsWatchCallback, @@ -710,7 +710,7 @@ export class TestServerHost implements server.ServerHost, FormatDiagnosticsHost, } invokeFileWatcher(fileFullPath: string, eventKind: FileWatcherEventKind, modifiedTime: Date | undefined) { - this.watchUtils.pollingWatches.forEach(fileFullPath, ({ cb }) => cb(fileFullPath, eventKind, modifiedTime)); + this.watchUtils.pollingWatches.forEach(fileFullPath, ({ cb }, fullPath) => cb(fullPath, eventKind, modifiedTime)); } private fsWatchCallback(watches: Watches, fullPath: string, eventName: "rename" | "change", modifiedTime: Date | undefined, entryFullPath: string | undefined, useTildeSuffix: boolean | undefined) { @@ -822,6 +822,10 @@ export class TestServerHost implements server.ServerHost, FormatDiagnosticsHost, return this.getRealFsEntry(isFsFolder, path, fsEntry); } + private getRealFileOrFolder(s: string): FsFile | FsFolder | undefined { + return this.getRealFsEntry((entry): entry is FsFile | FsFolder => !!entry && !isFsSymLink(entry), this.toFullPath(s)); + } + fileSystemEntryExists(s: string, entryKind: FileSystemEntryKind) { return entryKind === FileSystemEntryKind.File ? this.fileExists(s) : this.directoryExists(s); } @@ -832,14 +836,11 @@ export class TestServerHost implements server.ServerHost, FormatDiagnosticsHost, } getModifiedTime(s: string) { - const path = this.toFullPath(s); - const fsEntry = this.fs.get(path); - return (fsEntry && fsEntry.modifiedTime)!; // TODO: GH#18217 + return this.getRealFileOrFolder(s)?.modifiedTime; } setModifiedTime(s: string, date: Date) { - const path = this.toFullPath(s); - const fsEntry = this.fs.get(path); + const fsEntry = this.getRealFileOrFolder(s); if (fsEntry) { fsEntry.modifiedTime = date; this.invokeFileAndFsWatches(fsEntry.fullPath, FileWatcherEventKind.Changed, fsEntry.modifiedTime); diff --git a/src/testRunner/unittests/sys/symlinkWatching.ts b/src/testRunner/unittests/sys/symlinkWatching.ts new file mode 100644 index 0000000000000..6cec445fa3734 --- /dev/null +++ b/src/testRunner/unittests/sys/symlinkWatching.ts @@ -0,0 +1,222 @@ +import * as fs from "fs"; + +import { + IO, +} from "../../_namespaces/Harness"; +import * as ts from "../../_namespaces/ts"; +import { + defer, +} from "../../_namespaces/Utils"; +import { + createWatchedSystem, +} from "../helpers/virtualFileSystemWithWatch"; +describe("unittests:: sys:: symlinkWatching::", () => { + function delayedOp(op: () => void) { + ts.sys.setTimeout!(op, 100); + } + + function modifiedTimeToString(d: Date | undefined) { + if (!d) return undefined; + return `${d.getHours().toString().padStart(2, "0")}:${d.getMinutes().toString().padStart(2, "0")}:${d.getSeconds().toString().padStart(2, "0")}.${d.getMilliseconds().toString().padStart(3, "0")}`; + } + + function verifyWatchFile( + scenario: string, + sys: ts.System, + file: string, + link: string, + watchOptions: Pick, + getFileName?: (file: string) => string, + ) { + it(scenario, async () => { + const fileResult = watchFile(file); + const linkResult = watchFile(link); + delayedOp(() => sys.writeFile(getFileName?.(file) ?? file, "export const x = 100;")); + + // Should invoke on file as well as link + await fileResult.deferred[0].promise; + await linkResult.deferred[0].promise; + + delayedOp(() => sys.writeFile(getFileName?.(link) ?? link, "export const x = 100;")); + // Should invoke on file as well as link + await fileResult.deferred[1].promise; + await linkResult.deferred[1].promise; + + fileResult.watcher.close(); + linkResult.watcher.close(); + + function watchFile(toWatch: string) { + const deferred = [defer(), defer()]; + let indexForDefer = 0; + return { + watcher: sys.watchFile!( + toWatch, + (fileName, eventKind, modifiedTime) => { + assert.equal(fileName, toWatch); + assert.equal(eventKind, ts.FileWatcherEventKind.Changed); + const actual = modifiedTimeToString(modifiedTime); + assert(actual === undefined || actual === modifiedTimeToString(sys.getModifiedTime!(file))); + deferred[indexForDefer++].resolve(); + }, + 10, + watchOptions, + ), + deferred, + }; + } + }); + } + + function verifyWatchDirectoryUsingFsEvents( + sys: System, + dir: string, + link: string, + fsWatch: (dir: string, cb: ts.FsWatchCallback, sys: System) => ts.FileWatcher, + ) { + it(`watchDirectory using fsEvents sheetal`, async () => { + const expectedEvent = ["rename", "change", "rename", "change"]; + const expectedFileName = ["file1.ts", "file1.ts", "file2.ts", "file2.ts"]; + const fileResult = watchDirectory(dir); + const linkResult = watchDirectory(link); + delayedOp(() => sys.writeFile(`${dir}/file1.ts`, "export const x = 100;")); + + // Should invoke on file as well as link, rename and change + await fileResult.deferred[0].promise; + await linkResult.deferred[0].promise; + await fileResult.deferred[1].promise; + await linkResult.deferred[1].promise; + + delayedOp(() => sys.writeFile(`${link}/file2.ts`, "export const x = 100;")); + // // Should invoke on file as well as link, rename and change + await fileResult.deferred[2].promise; + await linkResult.deferred[2].promise; + await fileResult.deferred[3].promise; + await linkResult.deferred[3].promise; + + fileResult.watcher.close(); + linkResult.watcher.close(); + + function watchDirectory(dir: string) { + const deferred = [defer(), defer(), defer(), defer()]; + let indexForDefer = 0; + return { + dir, + watcher: fsWatch( + dir, + (event, fileName) => { + assert.equal(event, expectedEvent[indexForDefer]); + assert(!fileName || fileName === expectedFileName[indexForDefer]); + deferred[indexForDefer++].resolve(); + }, + sys, + ), + deferred, + }; + } + }); + } + + function getFileName(): (dir: string) => string { + return dir => `${dir}/${ts.getBaseFileName(dir)}.ts`; + } + + describe("with ts.sys::", () => { + const root = ts.normalizePath(IO.joinPath(IO.getWorkspaceRoot(), "tests/baselines/symlinks")); + before(() => { + cleanup(); + ts.sys.writeFile(`${root}/polling/file.ts`, "export const x = 10;"); + withSwallowException(() => fs.symlinkSync(`${root}/polling`, `${root}/linkedpolling`, "junction")); + ts.sys.writeFile(`${root}/fsevents/file.ts`, "export const x = 10;"); + withSwallowException(() => fs.symlinkSync(`${root}/fsevents`, `${root}/linkedfsevents`, "junction")); + ts.sys.writeFile(`${root}/dirpolling/file.ts`, "export const x = 10;"); + withSwallowException(() => fs.symlinkSync(`${root}/dirpolling`, `${root}/linkeddirpolling`, "junction")); + ts.sys.writeFile(`${root}/dirfsevents/file.ts`, "export const x = 10;"); + withSwallowException(() => fs.symlinkSync(`${root}/dirfsevents`, `${root}/linkeddirfsevents`, "junction")); + }); + after(() => { + cleanup(); + }); + + function cleanup() { + withSwallowException(() => fs.rmSync(root, { recursive: true, force: true })); + } + + function withSwallowException(op: () => void) { + try { + op(); + } + catch { /* swallow */ } + } + + verifyWatchFile( + "watchFile using polling", + ts.sys, + `${root}/polling/file.ts`, + `${root}/linkedpolling/file.ts`, + { watchFile: ts.WatchFileKind.PriorityPollingInterval }, + ); + verifyWatchFile( + "watchFile using fsEvents", + ts.sys, + `${root}/fsevents/file.ts`, + `${root}/linkedfsevents/file.ts`, + { watchFile: ts.WatchFileKind.UseFsEvents }, + ); + + verifyWatchFile( + "watchDirectory using polling", + ts.sys, + `${root}/dirpolling`, + `${root}/linkeddirpolling`, + { watchFile: ts.WatchFileKind.PriorityPollingInterval }, + getFileName(), + ); + + verifyWatchDirectoryUsingFsEvents( + ts.sys, + `${root}/dirfsevents`, + `${root}/linkeddirfsevents`, + (dir, cb) => fs.watch(dir, { persistent: true }, cb), + ); + }); + + describe("with virtualFileSystem::", () => { + const root = ts.normalizePath("/tests/baselines/symlinks"); + function getSys() { + return createWatchedSystem({ + [`${root}/folder/file.ts`]: "export const x = 10;", + [`${root}/linked`]: { symLink: `${root}/folder` }, + }); + } + verifyWatchFile( + "watchFile using polling", + getSys(), + `${root}/folder/file.ts`, + `${root}/linked/file.ts`, + { watchFile: ts.WatchFileKind.PriorityPollingInterval }, + ); + verifyWatchFile( + "watchFile using fsEvents", + getSys(), + `${root}/folder/file.ts`, + `${root}/linked/file.ts`, + { watchFile: ts.WatchFileKind.UseFsEvents }, + ); + + verifyWatchFile( + "watchDirectory using polling", + getSys(), + `${root}/folder`, + `${root}/linked`, + { watchFile: ts.WatchFileKind.PriorityPollingInterval }, + getFileName(), + ); + + verifyWatchDirectoryUsingFsEvents( + getSys(), + `${root}/folder`, + `${root}/linked`, + (dir, cb, sys) => sys.fsWatchWorker(dir, /*recursive*/ false, cb), + ); + }); +}); diff --git a/src/testRunner/unittests/tscWatch/forceConsistentCasingInFileNames.ts b/src/testRunner/unittests/tscWatch/forceConsistentCasingInFileNames.ts index 1d1e1b652fe9c..c78a4ab1b6a75 100644 --- a/src/testRunner/unittests/tscWatch/forceConsistentCasingInFileNames.ts +++ b/src/testRunner/unittests/tscWatch/forceConsistentCasingInFileNames.ts @@ -188,7 +188,7 @@ a;b; verifyTscWatch({ scenario: "forceConsistentCasingInFileNames", subScenario, - commandLineArgs: ["--w", "--p", ".", "--explainFiles"], + commandLineArgs: ["--w", "--p", ".", "--explainFiles", "--extendedDiagnostics"], sys: () => { const moduleA: File = { path: diskPath, @@ -226,7 +226,6 @@ a;b; `, ), timeouts: sys => sys.runQueuedTimeoutCallbacks(), - symlinksNotReflected: [`/user/username/projects/myproject/link.ts`], }, ], }); @@ -236,13 +235,13 @@ a;b; verifyFileSymlink("when file symlink target matches disk but import does not", `/user/username/projects/myproject/XY.ts`, `/user/username/projects/myproject/Xy.ts`, `./XY`); verifyFileSymlink("when import matches disk but file symlink target does not", `/user/username/projects/myproject/XY.ts`, `/user/username/projects/myproject/XY.ts`, `./Xy`); verifyFileSymlink("when import and file symlink target agree but do not match disk", `/user/username/projects/myproject/XY.ts`, `/user/username/projects/myproject/Xy.ts`, `./Xy`); - verifyFileSymlink("when import, file symlink target, and disk are all different", `/user/username/projects/myproject/XY.ts`, `/user/username/projects/myproject/Xy.ts`, `./yX`); + verifyFileSymlink("when import, file symlink target, and disk are all different", `/user/username/projects/myproject/XY.ts`, `/user/username/projects/myproject/Xy.ts`, `./xY`); function verifyDirSymlink(subScenario: string, diskPath: string, targetPath: string, importedPath: string) { verifyTscWatch({ scenario: "forceConsistentCasingInFileNames", subScenario, - commandLineArgs: ["--w", "--p", ".", "--explainFiles"], + commandLineArgs: ["--w", "--p", ".", "--explainFiles", "--extendedDiagnostics"], sys: () => { const moduleA: File = { path: `${diskPath}/a.ts`, @@ -281,7 +280,6 @@ a;b; `, ), timeouts: sys => sys.runQueuedTimeoutCallbacks(), - symlinksNotReflected: [`/user/username/projects/myproject/link/a.ts`], }, ], }); @@ -291,7 +289,7 @@ a;b; verifyDirSymlink("when directory symlink target matches disk but import does not", `/user/username/projects/myproject/XY`, `/user/username/projects/myproject/Xy`, `./XY`); verifyDirSymlink("when import matches disk but directory symlink target does not", `/user/username/projects/myproject/XY`, `/user/username/projects/myproject/XY`, `./Xy`); verifyDirSymlink("when import and directory symlink target agree but do not match disk", `/user/username/projects/myproject/XY`, `/user/username/projects/myproject/Xy`, `./Xy`); - verifyDirSymlink("when import, directory symlink target, and disk are all different", `/user/username/projects/myproject/XY`, `/user/username/projects/myproject/Xy`, `./yX`); + verifyDirSymlink("when import, directory symlink target, and disk are all different", `/user/username/projects/myproject/XY`, `/user/username/projects/myproject/Xy`, `./xY`); verifyTscWatch({ scenario: "forceConsistentCasingInFileNames", diff --git a/src/testRunner/unittests/tsserver/events/watchEvents.ts b/src/testRunner/unittests/tsserver/events/watchEvents.ts index 0a6028dcda33d..4c16dd91fde86 100644 --- a/src/testRunner/unittests/tsserver/events/watchEvents.ts +++ b/src/testRunner/unittests/tsserver/events/watchEvents.ts @@ -42,6 +42,7 @@ describe("unittests:: tsserver:: events:: watchEvents", () => { "Custom WatchedFiles", "Custom WatchedDirectories", host.getCanonicalFileName, + host, ), watchFile, watchDirectory, @@ -115,7 +116,7 @@ describe("unittests:: tsserver:: events:: watchEvents", () => { session.logger.log("Custom watch"); (session.logger.host as TestServerHostWithCustomWatch).factoryData.watchUtils.pollingWatches.forEach( path, - data => + (data, path) => session.executeCommandSeq({ command: ts.server.protocol.CommandTypes.WatchChange, arguments: { id: data.id, path, eventType: "update" }, diff --git a/src/testRunner/unittests/tsserver/forceConsistentCasingInFileNames.ts b/src/testRunner/unittests/tsserver/forceConsistentCasingInFileNames.ts index 7e264e856731f..bb14ea25d7c0d 100644 --- a/src/testRunner/unittests/tsserver/forceConsistentCasingInFileNames.ts +++ b/src/testRunner/unittests/tsserver/forceConsistentCasingInFileNames.ts @@ -1,4 +1,7 @@ import * as ts from "../../_namespaces/ts"; +import { + dedent, +} from "../../_namespaces/Utils"; import { jsonToReadableText, } from "../helpers"; @@ -14,6 +17,7 @@ import { createServerHost, File, libFile, + SymLink, } from "../helpers/virtualFileSystemWithWatch"; describe("unittests:: tsserver:: forceConsistentCasingInFileNames", () => { @@ -150,4 +154,182 @@ describe("unittests:: tsserver:: forceConsistentCasingInFileNames", () => { verifyGetErrRequest({ session, files: [anotherFile] }); baselineTsserverLogs("forceConsistentCasingInFileNames", "when changing module name with different casing", session); }); + + describe("with symlinks", () => { + function verifySymlink( + subScenario: string, + linkPath: string, + getFiles: () => { moduleA: File; symlinkA: SymLink; moduleB: File; tsconfig: File; }, + ) { + it(subScenario, () => { + const { moduleA, symlinkA, moduleB, tsconfig } = getFiles(); + const host = createServerHost([moduleA, symlinkA, moduleB, libFile, tsconfig], { + currentDirectory: "/user/username/projects/myproject", + }); + const session = new TestSession(host); + openFilesForSession([moduleB], session); + verifyGetErrRequest({ + session, + files: [moduleB], + }); + host.prependFile(moduleA.path, `// some comment\n`); + verifyGetErrRequest({ + session, + files: [moduleB], + existingTimeouts: true, + }); + baselineTsserverLogs("forceConsistentCasingInFileNames", subScenario, session); + }); + + it(`${subScenario} with target open`, () => { + const { moduleA, symlinkA, moduleB, tsconfig } = getFiles(); + const host = createServerHost([moduleA, symlinkA, moduleB, libFile, tsconfig], { + currentDirectory: "/user/username/projects/myproject", + }); + const session = new TestSession(host); + openFilesForSession([moduleB, moduleA], session); + verifyGetErrRequest({ + session, + files: [moduleB], + }); + session.executeCommandSeq({ + command: ts.server.protocol.CommandTypes.Change, + arguments: { + file: moduleA.path, + line: 1, + offset: 1, + endLine: 1, + endOffset: 1, + insertString: `// some comment\n`, + }, + }); + verifyGetErrRequest({ + session, + files: [moduleB], + }); + baselineTsserverLogs("forceConsistentCasingInFileNames", `${subScenario} with target open`, session); + }); + + it(`${subScenario} with link open`, () => { + const { moduleA, symlinkA, moduleB, tsconfig } = getFiles(); + const host = createServerHost([moduleA, symlinkA, moduleB, libFile, tsconfig], { + currentDirectory: "/user/username/projects/myproject", + }); + const session = new TestSession(host); + openFilesForSession([moduleB, linkPath], session); + verifyGetErrRequest({ + session, + files: [moduleB], + }); + host.prependFile(moduleA.path, `// some comment\n`); + verifyGetErrRequest({ + session, + files: [moduleB], + existingTimeouts: true, + }); + baselineTsserverLogs("forceConsistentCasingInFileNames", `${subScenario} with link open`, session); + }); + + it(`${subScenario} with target and link open`, () => { + const { moduleA, symlinkA, moduleB, tsconfig } = getFiles(); + const host = createServerHost([moduleA, symlinkA, moduleB, libFile, tsconfig], { + currentDirectory: "/user/username/projects/myproject", + }); + const session = new TestSession(host); + openFilesForSession([moduleB, moduleA, linkPath], session); + verifyGetErrRequest({ + session, + files: [moduleB], + }); + session.executeCommandSeq({ + command: ts.server.protocol.CommandTypes.Change, + arguments: { + file: moduleA.path, + line: 1, + offset: 1, + endLine: 1, + endOffset: 1, + insertString: `// some comment\n`, + }, + }); + verifyGetErrRequest({ + session, + files: [moduleB], + }); + baselineTsserverLogs("forceConsistentCasingInFileNames", `${subScenario} with target and link open`, session); + }); + } + function verifyFileSymlink(subScenario: string, diskPath: string, targetPath: string, importedPath: string) { + verifySymlink(subScenario, `/user/username/projects/myproject/link.ts`, () => { + const moduleA: File = { + path: diskPath, + content: dedent` + export const a = 1; + export const b = 2; + `, + }; + const symlinkA: SymLink = { + path: `/user/username/projects/myproject/link.ts`, + symLink: targetPath, + }; + const moduleB: File = { + path: `/user/username/projects/myproject/b.ts`, + content: dedent` + import { a } from "${importedPath}"; + import { b } from "./link"; + + a;b; + `, + }; + const tsconfig: File = { + path: `/user/username/projects/myproject/tsconfig.json`, + content: jsonToReadableText({ compilerOptions: { forceConsistentCasingInFileNames: true } }), + }; + return { moduleA, symlinkA, moduleB, tsconfig }; + }); + } + + verifyFileSymlink("when both file symlink target and import match disk", `/user/username/projects/myproject/XY.ts`, `/user/username/projects/myproject/XY.ts`, `./XY`); + verifyFileSymlink("when file symlink target matches disk but import does not", `/user/username/projects/myproject/XY.ts`, `/user/username/projects/myproject/Xy.ts`, `./XY`); + verifyFileSymlink("when import matches disk but file symlink target does not", `/user/username/projects/myproject/XY.ts`, `/user/username/projects/myproject/XY.ts`, `./Xy`); + verifyFileSymlink("when import and file symlink target agree but do not match disk", `/user/username/projects/myproject/XY.ts`, `/user/username/projects/myproject/Xy.ts`, `./Xy`); + verifyFileSymlink("when import, file symlink target, and disk are all different", `/user/username/projects/myproject/XY.ts`, `/user/username/projects/myproject/Xy.ts`, `./xY`); + + function verifyDirSymlink(subScenario: string, diskPath: string, targetPath: string, importedPath: string) { + verifySymlink(subScenario, `/user/username/projects/myproject/link/a.ts`, () => { + const moduleA: File = { + path: `${diskPath}/a.ts`, + content: dedent` + export const a = 1; + export const b = 2; + `, + }; + const symlinkA: SymLink = { + path: `/user/username/projects/myproject/link`, + symLink: targetPath, + }; + const moduleB: File = { + path: `/user/username/projects/myproject/b.ts`, + content: dedent` + import { a } from "${importedPath}/a"; + import { b } from "./link/a"; + + a;b; + `, + }; + const tsconfig: File = { + path: `/user/username/projects/myproject/tsconfig.json`, + // Use outFile because otherwise the real and linked files will have the same output path + content: jsonToReadableText({ compilerOptions: { forceConsistentCasingInFileNames: true, outFile: "out.js", module: "system" } }), + }; + return { moduleA, symlinkA, moduleB, tsconfig }; + }); + } + + verifyDirSymlink("when both directory symlink target and import match disk", `/user/username/projects/myproject/XY`, `/user/username/projects/myproject/XY`, `./XY`); + verifyDirSymlink("when directory symlink target matches disk but import does not", `/user/username/projects/myproject/XY`, `/user/username/projects/myproject/Xy`, `./XY`); + verifyDirSymlink("when import matches disk but directory symlink target does not", `/user/username/projects/myproject/XY`, `/user/username/projects/myproject/XY`, `./Xy`); + verifyDirSymlink("when import and directory symlink target agree but do not match disk", `/user/username/projects/myproject/XY`, `/user/username/projects/myproject/Xy`, `./Xy`); + verifyDirSymlink("when import, directory symlink target, and disk are all different", `/user/username/projects/myproject/XY`, `/user/username/projects/myproject/Xy`, `./xY`); + }); }); diff --git a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-both-directory-symlink-target-and-import-match-disk.js b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-both-directory-symlink-target-and-import-match-disk.js index 492906d765662..f8396f55964e3 100644 --- a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-both-directory-symlink-target-and-import-match-disk.js +++ b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-both-directory-symlink-target-and-import-match-disk.js @@ -38,11 +38,24 @@ interface Array { length: number; [n: number]: T; } } -/a/lib/tsc.js --w --p . --explainFiles +/a/lib/tsc.js --w --p . --explainFiles --extendedDiagnostics Output:: ->> Screen clear [12:00:27 AM] Starting compilation in watch mode... +Current directory: /user/username/projects/myproject CaseSensitiveFileNames: false +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file +Synchronizing program +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/b.ts","/user/username/projects/myproject/XY/a.ts"] + options: {"forceConsistentCasingInFileNames":true,"outFile":"/user/username/projects/myproject/out.js","module":4,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/b.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 250 undefined Source file +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots ../../../../a/lib/lib.d.ts Default library for target 'es5' XY/a.ts @@ -54,6 +67,8 @@ b.ts Matched by default include pattern '**/*' [12:00:30 AM] Found 0 errors. Watching for file changes. +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory //// [/user/username/projects/myproject/out.js] @@ -136,6 +151,7 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Not @@ -162,17 +178,29 @@ export const b = 2; +Output:: +FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 250 undefined Source file +FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 250 undefined Source file + + Timeout callback:: count: 1 -1: timerToUpdateProgram *new* +2: timerToUpdateProgram *new* Before running Timeout callback:: count: 1 -1: timerToUpdateProgram +2: timerToUpdateProgram After running Timeout callback:: count: 0 Output:: ->> Screen clear +Synchronizing program [12:00:33 AM] File change detected. Starting incremental compilation... +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/b.ts","/user/username/projects/myproject/XY/a.ts"] + options: {"forceConsistentCasingInFileNames":true,"outFile":"/user/username/projects/myproject/out.js","module":4,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} ../../../../a/lib/lib.d.ts Default library for target 'es5' XY/a.ts @@ -200,13 +228,14 @@ System.register("XY/a", [], function (exports_1, context_1) { } }; }); +// some comment System.register("link/a", [], function (exports_2, context_2) { "use strict"; var a, b; var __moduleName = context_2 && context_2.id; return { setters: [], - execute: function () { + execute: function () {// some comment exports_2("a", a = 1); exports_2("b", b = 2); } @@ -246,6 +275,7 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Completely diff --git a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-both-file-symlink-target-and-import-match-disk.js b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-both-file-symlink-target-and-import-match-disk.js index c5b8e96b521a1..794a11d1dfb22 100644 --- a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-both-file-symlink-target-and-import-match-disk.js +++ b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-both-file-symlink-target-and-import-match-disk.js @@ -36,11 +36,24 @@ interface Array { length: number; [n: number]: T; } } -/a/lib/tsc.js --w --p . --explainFiles +/a/lib/tsc.js --w --p . --explainFiles --extendedDiagnostics Output:: ->> Screen clear [12:00:25 AM] Starting compilation in watch mode... +Current directory: /user/username/projects/myproject CaseSensitiveFileNames: false +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file +Synchronizing program +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/XY.ts","/user/username/projects/myproject/b.ts","/user/username/projects/myproject/link.ts"] + options: {"forceConsistentCasingInFileNames":true,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/b.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 250 undefined Source file +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots ../../../../a/lib/lib.d.ts Default library for target 'es5' XY.ts @@ -53,6 +66,8 @@ b.ts Matched by default include pattern '**/*' [12:00:32 AM] Found 0 errors. Watching for file changes. +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory //// [/user/username/projects/myproject/XY.js] @@ -113,6 +128,7 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Not @@ -147,17 +163,29 @@ export const b = 2; +Output:: +FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 250 undefined Source file +FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 250 undefined Source file + + Timeout callback:: count: 1 -1: timerToUpdateProgram *new* +2: timerToUpdateProgram *new* Before running Timeout callback:: count: 1 -1: timerToUpdateProgram +2: timerToUpdateProgram After running Timeout callback:: count: 0 Output:: ->> Screen clear +Synchronizing program [12:00:35 AM] File change detected. Starting incremental compilation... +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/XY.ts","/user/username/projects/myproject/b.ts","/user/username/projects/myproject/link.ts"] + options: {"forceConsistentCasingInFileNames":true,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} ../../../../a/lib/lib.d.ts Default library for target 'es5' XY.ts @@ -168,7 +196,7 @@ link.ts Matched by default include pattern '**/*' b.ts Matched by default include pattern '**/*' -[12:00:42 AM] Found 0 errors. Watching for file changes. +[12:00:45 AM] Found 0 errors. Watching for file changes. @@ -181,6 +209,15 @@ exports.a = 1; exports.b = 2; +//// [/user/username/projects/myproject/link.js] +"use strict"; +// some comment +Object.defineProperty(exports, "__esModule", { value: true }); +exports.b = exports.a = void 0; +exports.a = 1; +exports.b = 2; + + //// [/user/username/projects/myproject/b.js] file written with same contents @@ -194,6 +231,7 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Completely @@ -205,10 +243,12 @@ Program files:: Semantic diagnostics in builder refreshed for:: /user/username/projects/myproject/XY.ts +/user/username/projects/myproject/link.ts /user/username/projects/myproject/b.ts Shape signatures in builder refreshed for:: /user/username/projects/myproject/xy.ts (computed .d.ts) /user/username/projects/myproject/b.ts (computed .d.ts) +/user/username/projects/myproject/link.ts (computed .d.ts) exitCode:: ExitStatus.undefined diff --git a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-directory-symlink-target-matches-disk-but-import-does-not.js b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-directory-symlink-target-matches-disk-but-import-does-not.js index 6fbd761335476..04134386ea20f 100644 --- a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-directory-symlink-target-matches-disk-but-import-does-not.js +++ b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-directory-symlink-target-matches-disk-but-import-does-not.js @@ -38,11 +38,24 @@ interface Array { length: number; [n: number]: T; } } -/a/lib/tsc.js --w --p . --explainFiles +/a/lib/tsc.js --w --p . --explainFiles --extendedDiagnostics Output:: ->> Screen clear [12:00:27 AM] Starting compilation in watch mode... +Current directory: /user/username/projects/myproject CaseSensitiveFileNames: false +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file +Synchronizing program +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/b.ts","/user/username/projects/myproject/XY/a.ts"] + options: {"forceConsistentCasingInFileNames":true,"outFile":"/user/username/projects/myproject/out.js","module":4,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/b.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 250 undefined Source file +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots ../../../../a/lib/lib.d.ts Default library for target 'es5' XY/a.ts @@ -54,6 +67,8 @@ b.ts Matched by default include pattern '**/*' [12:00:30 AM] Found 0 errors. Watching for file changes. +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory //// [/user/username/projects/myproject/out.js] @@ -136,6 +151,7 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Not @@ -162,17 +178,29 @@ export const b = 2; +Output:: +FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 250 undefined Source file +FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 250 undefined Source file + + Timeout callback:: count: 1 -1: timerToUpdateProgram *new* +2: timerToUpdateProgram *new* Before running Timeout callback:: count: 1 -1: timerToUpdateProgram +2: timerToUpdateProgram After running Timeout callback:: count: 0 Output:: ->> Screen clear +Synchronizing program [12:00:33 AM] File change detected. Starting incremental compilation... +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/b.ts","/user/username/projects/myproject/XY/a.ts"] + options: {"forceConsistentCasingInFileNames":true,"outFile":"/user/username/projects/myproject/out.js","module":4,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} ../../../../a/lib/lib.d.ts Default library for target 'es5' XY/a.ts @@ -200,13 +228,14 @@ System.register("XY/a", [], function (exports_1, context_1) { } }; }); +// some comment System.register("link/a", [], function (exports_2, context_2) { "use strict"; var a, b; var __moduleName = context_2 && context_2.id; return { setters: [], - execute: function () { + execute: function () {// some comment exports_2("a", a = 1); exports_2("b", b = 2); } @@ -246,6 +275,7 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Completely diff --git a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-file-symlink-target-matches-disk-but-import-does-not.js b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-file-symlink-target-matches-disk-but-import-does-not.js index 0f3c728285294..eea6eaab9df55 100644 --- a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-file-symlink-target-matches-disk-but-import-does-not.js +++ b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-file-symlink-target-matches-disk-but-import-does-not.js @@ -36,11 +36,24 @@ interface Array { length: number; [n: number]: T; } } -/a/lib/tsc.js --w --p . --explainFiles +/a/lib/tsc.js --w --p . --explainFiles --extendedDiagnostics Output:: ->> Screen clear [12:00:25 AM] Starting compilation in watch mode... +Current directory: /user/username/projects/myproject CaseSensitiveFileNames: false +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file +Synchronizing program +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/XY.ts","/user/username/projects/myproject/b.ts","/user/username/projects/myproject/link.ts"] + options: {"forceConsistentCasingInFileNames":true,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/b.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 250 undefined Source file +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots ../../../../a/lib/lib.d.ts Default library for target 'es5' XY.ts @@ -53,6 +66,8 @@ b.ts Matched by default include pattern '**/*' [12:00:32 AM] Found 0 errors. Watching for file changes. +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory //// [/user/username/projects/myproject/XY.js] @@ -113,6 +128,7 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Not @@ -147,17 +163,29 @@ export const b = 2; +Output:: +FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 250 undefined Source file +FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 250 undefined Source file + + Timeout callback:: count: 1 -1: timerToUpdateProgram *new* +2: timerToUpdateProgram *new* Before running Timeout callback:: count: 1 -1: timerToUpdateProgram +2: timerToUpdateProgram After running Timeout callback:: count: 0 Output:: ->> Screen clear +Synchronizing program [12:00:35 AM] File change detected. Starting incremental compilation... +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/XY.ts","/user/username/projects/myproject/b.ts","/user/username/projects/myproject/link.ts"] + options: {"forceConsistentCasingInFileNames":true,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} ../../../../a/lib/lib.d.ts Default library for target 'es5' XY.ts @@ -168,7 +196,7 @@ link.ts Matched by default include pattern '**/*' b.ts Matched by default include pattern '**/*' -[12:00:42 AM] Found 0 errors. Watching for file changes. +[12:00:45 AM] Found 0 errors. Watching for file changes. @@ -181,6 +209,15 @@ exports.a = 1; exports.b = 2; +//// [/user/username/projects/myproject/link.js] +"use strict"; +// some comment +Object.defineProperty(exports, "__esModule", { value: true }); +exports.b = exports.a = void 0; +exports.a = 1; +exports.b = 2; + + //// [/user/username/projects/myproject/b.js] file written with same contents @@ -194,6 +231,7 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Completely @@ -205,10 +243,12 @@ Program files:: Semantic diagnostics in builder refreshed for:: /user/username/projects/myproject/XY.ts +/user/username/projects/myproject/link.ts /user/username/projects/myproject/b.ts Shape signatures in builder refreshed for:: /user/username/projects/myproject/xy.ts (computed .d.ts) /user/username/projects/myproject/b.ts (computed .d.ts) +/user/username/projects/myproject/link.ts (computed .d.ts) exitCode:: ExitStatus.undefined diff --git a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import,-directory-symlink-target,-and-disk-are-all-different.js b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import,-directory-symlink-target,-and-disk-are-all-different.js index 9e9a72d01e597..bb799030d2a26 100644 --- a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import,-directory-symlink-target,-and-disk-are-all-different.js +++ b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import,-directory-symlink-target,-and-disk-are-all-different.js @@ -9,7 +9,7 @@ export const b = 2; //// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/Xy) //// [/user/username/projects/myproject/b.ts] -import { a } from "./yX/a"; +import { a } from "./xY/a"; import { b } from "./link/a"; a;b; @@ -38,30 +38,49 @@ interface Array { length: number; [n: number]: T; } } -/a/lib/tsc.js --w --p . --explainFiles +/a/lib/tsc.js --w --p . --explainFiles --extendedDiagnostics Output:: ->> Screen clear [12:00:27 AM] Starting compilation in watch mode... -b.ts:2:19 - error TS2792: Cannot find module './yX/a'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option? +Current directory: /user/username/projects/myproject CaseSensitiveFileNames: false +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file +Synchronizing program +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/b.ts","/user/username/projects/myproject/XY/a.ts"] + options: {"forceConsistentCasingInFileNames":true,"outFile":"/user/username/projects/myproject/out.js","module":4,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/b.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/xY/a.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 250 undefined Source file +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots +b.ts:2:19 - error TS1261: Already included file name '/user/username/projects/myproject/xY/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing. + The file is in the program because: + Imported via "./xY/a" from file '/user/username/projects/myproject/b.ts' + Matched by default include pattern '**/*' -2 import { a } from "./yX/a"; +2 import { a } from "./xY/a";    ~~~~~~~~ ../../../../a/lib/lib.d.ts Default library for target 'es5' +xY/a.ts + Imported via "./xY/a" from file 'b.ts' + Matched by default include pattern '**/*' link/a.ts Imported via "./link/a" from file 'b.ts' b.ts Matched by default include pattern '**/*' -XY/a.ts - Matched by default include pattern '**/*' [12:00:30 AM] Found 1 error. Watching for file changes. +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory //// [/user/username/projects/myproject/out.js] -System.register("link/a", [], function (exports_1, context_1) { +System.register("xY/a", [], function (exports_1, context_1) { "use strict"; var a, b; var __moduleName = context_1 && context_1.id; @@ -73,10 +92,22 @@ System.register("link/a", [], function (exports_1, context_1) { } }; }); -System.register("b", ["./yX/a", "link/a"], function (exports_2, context_2) { +System.register("link/a", [], function (exports_2, context_2) { "use strict"; - var a_1, a_2; + var a, b; var __moduleName = context_2 && context_2.id; + return { + setters: [], + execute: function () { + exports_2("a", a = 1); + exports_2("b", b = 2); + } + }; +}); +System.register("b", ["xY/a", "link/a"], function (exports_3, context_3) { + "use strict"; + var a_1, a_2; + var __moduleName = context_3 && context_3.id; return { setters: [ function (a_1_1) { @@ -92,40 +123,26 @@ System.register("b", ["./yX/a", "link/a"], function (exports_2, context_2) { } }; }); -System.register("XY/a", [], function (exports_3, context_3) { - "use strict"; - var a, b; - var __moduleName = context_3 && context_3.id; - return { - setters: [], - execute: function () { - exports_3("a", a = 1); - exports_3("b", b = 2); - } - }; -}); PolledWatches:: /user/username/projects/myproject/node_modules/@types: *new* {"pollingInterval":500} -/user/username/projects/myproject/yX: *new* - {"pollingInterval":500} /user/username/projects/node_modules/@types: *new* {"pollingInterval":500} FsWatches:: /a/lib/lib.d.ts: *new* {} -/user/username/projects/myproject/XY/a.ts: *new* - {} /user/username/projects/myproject/b.ts: *new* {} /user/username/projects/myproject/link/a.ts: *new* {} /user/username/projects/myproject/tsconfig.json: *new* {} +/user/username/projects/myproject/xY/a.ts: *new* + {} FsWatchesRecursive:: /user/username/projects/myproject: *new* @@ -142,14 +159,15 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Not Program files:: /a/lib/lib.d.ts +/user/username/projects/myproject/xY/a.ts /user/username/projects/myproject/link/a.ts /user/username/projects/myproject/b.ts -/user/username/projects/myproject/XY/a.ts No cached semantic diagnostics in the builder:: @@ -168,51 +186,81 @@ export const b = 2; +Output:: +FileWatcher:: Triggered with /user/username/projects/myproject/xY/a.ts 1:: WatchInfo: /user/username/projects/myproject/xY/a.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/xY/a.ts 1:: WatchInfo: /user/username/projects/myproject/xY/a.ts 250 undefined Source file +FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 250 undefined Source file + + Timeout callback:: count: 1 -1: timerToUpdateProgram *new* +2: timerToUpdateProgram *new* Before running Timeout callback:: count: 1 -1: timerToUpdateProgram +2: timerToUpdateProgram After running Timeout callback:: count: 0 Output:: ->> Screen clear +Synchronizing program [12:00:33 AM] File change detected. Starting incremental compilation... -b.ts:2:19 - error TS2792: Cannot find module './yX/a'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option? +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/b.ts","/user/username/projects/myproject/XY/a.ts"] + options: {"forceConsistentCasingInFileNames":true,"outFile":"/user/username/projects/myproject/out.js","module":4,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +b.ts:2:19 - error TS1261: Already included file name '/user/username/projects/myproject/xY/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing. + The file is in the program because: + Imported via "./xY/a" from file '/user/username/projects/myproject/b.ts' + Matched by default include pattern '**/*' -2 import { a } from "./yX/a"; +2 import { a } from "./xY/a";    ~~~~~~~~ ../../../../a/lib/lib.d.ts Default library for target 'es5' +xY/a.ts + Imported via "./xY/a" from file 'b.ts' + Matched by default include pattern '**/*' link/a.ts Imported via "./link/a" from file 'b.ts' b.ts Matched by default include pattern '**/*' -XY/a.ts - Matched by default include pattern '**/*' [12:00:37 AM] Found 1 error. Watching for file changes. //// [/user/username/projects/myproject/out.js] -System.register("link/a", [], function (exports_1, context_1) { +// some comment +System.register("xY/a", [], function (exports_1, context_1) { "use strict"; var a, b; var __moduleName = context_1 && context_1.id; return { setters: [], - execute: function () { + execute: function () {// some comment exports_1("a", a = 1); exports_1("b", b = 2); } }; }); -System.register("b", ["./yX/a", "link/a"], function (exports_2, context_2) { +// some comment +System.register("link/a", [], function (exports_2, context_2) { "use strict"; - var a_1, a_2; + var a, b; var __moduleName = context_2 && context_2.id; + return { + setters: [], + execute: function () {// some comment + exports_2("a", a = 1); + exports_2("b", b = 2); + } + }; +}); +System.register("b", ["xY/a", "link/a"], function (exports_3, context_3) { + "use strict"; + var a_1, a_2; + var __moduleName = context_3 && context_3.id; return { setters: [ function (a_1_1) { @@ -228,19 +276,6 @@ System.register("b", ["./yX/a", "link/a"], function (exports_2, context_2) { } }; }); -// some comment -System.register("XY/a", [], function (exports_3, context_3) { - "use strict"; - var a, b; - var __moduleName = context_3 && context_3.id; - return { - setters: [], - execute: function () {// some comment - exports_3("a", a = 1); - exports_3("b", b = 2); - } - }; -}); @@ -256,14 +291,15 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Completely Program files:: /a/lib/lib.d.ts +/user/username/projects/myproject/xY/a.ts /user/username/projects/myproject/link/a.ts /user/username/projects/myproject/b.ts -/user/username/projects/myproject/XY/a.ts No cached semantic diagnostics in the builder:: diff --git a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import,-file-symlink-target,-and-disk-are-all-different.js b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import,-file-symlink-target,-and-disk-are-all-different.js index 94a19d7a0f6db..c995b0a6fded3 100644 --- a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import,-file-symlink-target,-and-disk-are-all-different.js +++ b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import,-file-symlink-target,-and-disk-are-all-different.js @@ -9,7 +9,7 @@ export const b = 2; //// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/Xy.ts) //// [/user/username/projects/myproject/b.ts] -import { a } from "./yX"; +import { a } from "./xY"; import { b } from "./link"; a;b; @@ -36,20 +36,37 @@ interface Array { length: number; [n: number]: T; } } -/a/lib/tsc.js --w --p . --explainFiles +/a/lib/tsc.js --w --p . --explainFiles --extendedDiagnostics Output:: ->> Screen clear [12:00:25 AM] Starting compilation in watch mode... -b.ts:2:19 - error TS2307: Cannot find module './yX' or its corresponding type declarations. +Current directory: /user/username/projects/myproject CaseSensitiveFileNames: false +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file +Synchronizing program +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/XY.ts","/user/username/projects/myproject/b.ts","/user/username/projects/myproject/link.ts"] + options: {"forceConsistentCasingInFileNames":true,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/b.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 250 undefined Source file +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots +b.ts:2:19 - error TS1149: File name '/user/username/projects/myproject/xY.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing. + The file is in the program because: + Matched by default include pattern '**/*' + Imported via "./xY" from file '/user/username/projects/myproject/b.ts' -2 import { a } from "./yX"; +2 import { a } from "./xY";    ~~~~~~ ../../../../a/lib/lib.d.ts Default library for target 'es5' XY.ts Matched by default include pattern '**/*' + Imported via "./xY" from file 'b.ts' link.ts Imported via "./link" from file 'b.ts' Matched by default include pattern '**/*' @@ -57,6 +74,8 @@ b.ts Matched by default include pattern '**/*' [12:00:32 AM] Found 1 error. Watching for file changes. +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory //// [/user/username/projects/myproject/XY.js] @@ -78,9 +97,9 @@ exports.b = 2; //// [/user/username/projects/myproject/b.js] "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var yX_1 = require("./yX"); +var xY_1 = require("./xY"); var link_1 = require("./link"); -yX_1.a; +xY_1.a; link_1.b; @@ -88,16 +107,12 @@ link_1.b; PolledWatches:: /user/username/projects/myproject/node_modules/@types: *new* {"pollingInterval":500} -/user/username/projects/myproject/yX: *new* - {"pollingInterval":500} /user/username/projects/node_modules/@types: *new* {"pollingInterval":500} FsWatches:: /a/lib/lib.d.ts: *new* {} -/user/username/projects/myproject: *new* - {} /user/username/projects/myproject/XY.ts: *new* {} /user/username/projects/myproject/b.ts: *new* @@ -121,6 +136,7 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Not @@ -155,32 +171,48 @@ export const b = 2; +Output:: +FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 250 undefined Source file +FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 250 undefined Source file + + Timeout callback:: count: 1 -1: timerToUpdateProgram *new* +2: timerToUpdateProgram *new* Before running Timeout callback:: count: 1 -1: timerToUpdateProgram +2: timerToUpdateProgram After running Timeout callback:: count: 0 Output:: ->> Screen clear +Synchronizing program [12:00:35 AM] File change detected. Starting incremental compilation... -b.ts:2:19 - error TS2307: Cannot find module './yX' or its corresponding type declarations. +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/XY.ts","/user/username/projects/myproject/b.ts","/user/username/projects/myproject/link.ts"] + options: {"forceConsistentCasingInFileNames":true,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +b.ts:2:19 - error TS1149: File name '/user/username/projects/myproject/xY.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing. + The file is in the program because: + Matched by default include pattern '**/*' + Imported via "./xY" from file '/user/username/projects/myproject/b.ts' -2 import { a } from "./yX"; +2 import { a } from "./xY";    ~~~~~~ ../../../../a/lib/lib.d.ts Default library for target 'es5' XY.ts Matched by default include pattern '**/*' + Imported via "./xY" from file 'b.ts' link.ts Imported via "./link" from file 'b.ts' Matched by default include pattern '**/*' b.ts Matched by default include pattern '**/*' -[12:00:39 AM] Found 1 error. Watching for file changes. +[12:00:45 AM] Found 1 error. Watching for file changes. @@ -193,6 +225,16 @@ exports.a = 1; exports.b = 2; +//// [/user/username/projects/myproject/link.js] +"use strict"; +// some comment +Object.defineProperty(exports, "__esModule", { value: true }); +exports.b = exports.a = void 0; +exports.a = 1; +exports.b = 2; + + +//// [/user/username/projects/myproject/b.js] file written with same contents Program root files: [ @@ -205,6 +247,7 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Completely @@ -216,8 +259,12 @@ Program files:: Semantic diagnostics in builder refreshed for:: /user/username/projects/myproject/XY.ts +/user/username/projects/myproject/link.ts +/user/username/projects/myproject/b.ts Shape signatures in builder refreshed for:: /user/username/projects/myproject/xy.ts (computed .d.ts) +/user/username/projects/myproject/b.ts (computed .d.ts) +/user/username/projects/myproject/link.ts (computed .d.ts) exitCode:: ExitStatus.undefined diff --git a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import-and-directory-symlink-target-agree-but-do-not-match-disk.js b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import-and-directory-symlink-target-agree-but-do-not-match-disk.js index 8e16059bf38ad..c9131f80011fc 100644 --- a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import-and-directory-symlink-target-agree-but-do-not-match-disk.js +++ b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import-and-directory-symlink-target-agree-but-do-not-match-disk.js @@ -38,11 +38,24 @@ interface Array { length: number; [n: number]: T; } } -/a/lib/tsc.js --w --p . --explainFiles +/a/lib/tsc.js --w --p . --explainFiles --extendedDiagnostics Output:: ->> Screen clear [12:00:27 AM] Starting compilation in watch mode... +Current directory: /user/username/projects/myproject CaseSensitiveFileNames: false +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file +Synchronizing program +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/b.ts","/user/username/projects/myproject/XY/a.ts"] + options: {"forceConsistentCasingInFileNames":true,"outFile":"/user/username/projects/myproject/out.js","module":4,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/b.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/Xy/a.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 250 undefined Source file +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots b.ts:2:19 - error TS1261: Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing. The file is in the program because: Imported via "./Xy/a" from file '/user/username/projects/myproject/b.ts' @@ -62,6 +75,8 @@ b.ts Matched by default include pattern '**/*' [12:00:30 AM] Found 1 error. Watching for file changes. +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory //// [/user/username/projects/myproject/out.js] @@ -144,6 +159,7 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Not @@ -170,17 +186,29 @@ export const b = 2; +Output:: +FileWatcher:: Triggered with /user/username/projects/myproject/Xy/a.ts 1:: WatchInfo: /user/username/projects/myproject/Xy/a.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/Xy/a.ts 1:: WatchInfo: /user/username/projects/myproject/Xy/a.ts 250 undefined Source file +FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 250 undefined Source file + + Timeout callback:: count: 1 -1: timerToUpdateProgram *new* +2: timerToUpdateProgram *new* Before running Timeout callback:: count: 1 -1: timerToUpdateProgram +2: timerToUpdateProgram After running Timeout callback:: count: 0 Output:: ->> Screen clear +Synchronizing program [12:00:33 AM] File change detected. Starting incremental compilation... +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/b.ts","/user/username/projects/myproject/XY/a.ts"] + options: {"forceConsistentCasingInFileNames":true,"outFile":"/user/username/projects/myproject/out.js","module":4,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} b.ts:2:19 - error TS1261: Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing. The file is in the program because: Imported via "./Xy/a" from file '/user/username/projects/myproject/b.ts' @@ -216,13 +244,14 @@ System.register("Xy/a", [], function (exports_1, context_1) { } }; }); +// some comment System.register("link/a", [], function (exports_2, context_2) { "use strict"; var a, b; var __moduleName = context_2 && context_2.id; return { setters: [], - execute: function () { + execute: function () {// some comment exports_2("a", a = 1); exports_2("b", b = 2); } @@ -262,6 +291,7 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Completely diff --git a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import-and-file-symlink-target-agree-but-do-not-match-disk.js b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import-and-file-symlink-target-agree-but-do-not-match-disk.js index acbae92d6101d..a1434a2c98f5c 100644 --- a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import-and-file-symlink-target-agree-but-do-not-match-disk.js +++ b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import-and-file-symlink-target-agree-but-do-not-match-disk.js @@ -36,11 +36,24 @@ interface Array { length: number; [n: number]: T; } } -/a/lib/tsc.js --w --p . --explainFiles +/a/lib/tsc.js --w --p . --explainFiles --extendedDiagnostics Output:: ->> Screen clear [12:00:25 AM] Starting compilation in watch mode... +Current directory: /user/username/projects/myproject CaseSensitiveFileNames: false +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file +Synchronizing program +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/XY.ts","/user/username/projects/myproject/b.ts","/user/username/projects/myproject/link.ts"] + options: {"forceConsistentCasingInFileNames":true,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/b.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 250 undefined Source file +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots b.ts:2:19 - error TS1149: File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing. The file is in the program because: Matched by default include pattern '**/*' @@ -61,6 +74,8 @@ b.ts Matched by default include pattern '**/*' [12:00:32 AM] Found 1 error. Watching for file changes. +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory //// [/user/username/projects/myproject/XY.js] @@ -121,6 +136,7 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Not @@ -155,17 +171,29 @@ export const b = 2; +Output:: +FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 250 undefined Source file +FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 250 undefined Source file + + Timeout callback:: count: 1 -1: timerToUpdateProgram *new* +2: timerToUpdateProgram *new* Before running Timeout callback:: count: 1 -1: timerToUpdateProgram +2: timerToUpdateProgram After running Timeout callback:: count: 0 Output:: ->> Screen clear +Synchronizing program [12:00:35 AM] File change detected. Starting incremental compilation... +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/XY.ts","/user/username/projects/myproject/b.ts","/user/username/projects/myproject/link.ts"] + options: {"forceConsistentCasingInFileNames":true,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} b.ts:2:19 - error TS1149: File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing. The file is in the program because: Matched by default include pattern '**/*' @@ -184,7 +212,7 @@ link.ts Matched by default include pattern '**/*' b.ts Matched by default include pattern '**/*' -[12:00:42 AM] Found 1 error. Watching for file changes. +[12:00:45 AM] Found 1 error. Watching for file changes. @@ -197,6 +225,15 @@ exports.a = 1; exports.b = 2; +//// [/user/username/projects/myproject/link.js] +"use strict"; +// some comment +Object.defineProperty(exports, "__esModule", { value: true }); +exports.b = exports.a = void 0; +exports.a = 1; +exports.b = 2; + + //// [/user/username/projects/myproject/b.js] file written with same contents @@ -210,6 +247,7 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Completely @@ -221,10 +259,12 @@ Program files:: Semantic diagnostics in builder refreshed for:: /user/username/projects/myproject/XY.ts +/user/username/projects/myproject/link.ts /user/username/projects/myproject/b.ts Shape signatures in builder refreshed for:: /user/username/projects/myproject/xy.ts (computed .d.ts) /user/username/projects/myproject/b.ts (computed .d.ts) +/user/username/projects/myproject/link.ts (computed .d.ts) exitCode:: ExitStatus.undefined diff --git a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import-matches-disk-but-directory-symlink-target-does-not.js b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import-matches-disk-but-directory-symlink-target-does-not.js index 7807baa22a334..8cc332379f227 100644 --- a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import-matches-disk-but-directory-symlink-target-does-not.js +++ b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import-matches-disk-but-directory-symlink-target-does-not.js @@ -38,11 +38,24 @@ interface Array { length: number; [n: number]: T; } } -/a/lib/tsc.js --w --p . --explainFiles +/a/lib/tsc.js --w --p . --explainFiles --extendedDiagnostics Output:: ->> Screen clear [12:00:27 AM] Starting compilation in watch mode... +Current directory: /user/username/projects/myproject CaseSensitiveFileNames: false +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file +Synchronizing program +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/b.ts","/user/username/projects/myproject/XY/a.ts"] + options: {"forceConsistentCasingInFileNames":true,"outFile":"/user/username/projects/myproject/out.js","module":4,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/b.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/Xy/a.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 250 undefined Source file +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots b.ts:2:19 - error TS1261: Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing. The file is in the program because: Imported via "./Xy/a" from file '/user/username/projects/myproject/b.ts' @@ -62,6 +75,8 @@ b.ts Matched by default include pattern '**/*' [12:00:30 AM] Found 1 error. Watching for file changes. +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory //// [/user/username/projects/myproject/out.js] @@ -144,6 +159,7 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Not @@ -170,17 +186,29 @@ export const b = 2; +Output:: +FileWatcher:: Triggered with /user/username/projects/myproject/Xy/a.ts 1:: WatchInfo: /user/username/projects/myproject/Xy/a.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/Xy/a.ts 1:: WatchInfo: /user/username/projects/myproject/Xy/a.ts 250 undefined Source file +FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 250 undefined Source file + + Timeout callback:: count: 1 -1: timerToUpdateProgram *new* +2: timerToUpdateProgram *new* Before running Timeout callback:: count: 1 -1: timerToUpdateProgram +2: timerToUpdateProgram After running Timeout callback:: count: 0 Output:: ->> Screen clear +Synchronizing program [12:00:33 AM] File change detected. Starting incremental compilation... +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/b.ts","/user/username/projects/myproject/XY/a.ts"] + options: {"forceConsistentCasingInFileNames":true,"outFile":"/user/username/projects/myproject/out.js","module":4,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} b.ts:2:19 - error TS1261: Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing. The file is in the program because: Imported via "./Xy/a" from file '/user/username/projects/myproject/b.ts' @@ -216,13 +244,14 @@ System.register("Xy/a", [], function (exports_1, context_1) { } }; }); +// some comment System.register("link/a", [], function (exports_2, context_2) { "use strict"; var a, b; var __moduleName = context_2 && context_2.id; return { setters: [], - execute: function () { + execute: function () {// some comment exports_2("a", a = 1); exports_2("b", b = 2); } @@ -262,6 +291,7 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Completely diff --git a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import-matches-disk-but-file-symlink-target-does-not.js b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import-matches-disk-but-file-symlink-target-does-not.js index 25f173f6f2868..f4f7e285cdaea 100644 --- a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import-matches-disk-but-file-symlink-target-does-not.js +++ b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-import-matches-disk-but-file-symlink-target-does-not.js @@ -36,11 +36,24 @@ interface Array { length: number; [n: number]: T; } } -/a/lib/tsc.js --w --p . --explainFiles +/a/lib/tsc.js --w --p . --explainFiles --extendedDiagnostics Output:: ->> Screen clear [12:00:25 AM] Starting compilation in watch mode... +Current directory: /user/username/projects/myproject CaseSensitiveFileNames: false +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file +Synchronizing program +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/XY.ts","/user/username/projects/myproject/b.ts","/user/username/projects/myproject/link.ts"] + options: {"forceConsistentCasingInFileNames":true,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/b.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 250 undefined Source file +FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 250 undefined Source file +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots b.ts:2:19 - error TS1149: File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing. The file is in the program because: Matched by default include pattern '**/*' @@ -61,6 +74,8 @@ b.ts Matched by default include pattern '**/*' [12:00:32 AM] Found 1 error. Watching for file changes. +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory //// [/user/username/projects/myproject/XY.js] @@ -121,6 +136,7 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Not @@ -155,17 +171,29 @@ export const b = 2; +Output:: +FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 250 undefined Source file +FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 250 undefined Source file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 250 undefined Source file + + Timeout callback:: count: 1 -1: timerToUpdateProgram *new* +2: timerToUpdateProgram *new* Before running Timeout callback:: count: 1 -1: timerToUpdateProgram +2: timerToUpdateProgram After running Timeout callback:: count: 0 Output:: ->> Screen clear +Synchronizing program [12:00:35 AM] File change detected. Starting incremental compilation... +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/XY.ts","/user/username/projects/myproject/b.ts","/user/username/projects/myproject/link.ts"] + options: {"forceConsistentCasingInFileNames":true,"watch":true,"project":"/user/username/projects/myproject","explainFiles":true,"extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} b.ts:2:19 - error TS1149: File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing. The file is in the program because: Matched by default include pattern '**/*' @@ -184,7 +212,7 @@ link.ts Matched by default include pattern '**/*' b.ts Matched by default include pattern '**/*' -[12:00:42 AM] Found 1 error. Watching for file changes. +[12:00:45 AM] Found 1 error. Watching for file changes. @@ -197,6 +225,15 @@ exports.a = 1; exports.b = 2; +//// [/user/username/projects/myproject/link.js] +"use strict"; +// some comment +Object.defineProperty(exports, "__esModule", { value: true }); +exports.b = exports.a = void 0; +exports.a = 1; +exports.b = 2; + + //// [/user/username/projects/myproject/b.js] file written with same contents @@ -210,6 +247,7 @@ Program options: { "watch": true, "project": "/user/username/projects/myproject", "explainFiles": true, + "extendedDiagnostics": true, "configFilePath": "/user/username/projects/myproject/tsconfig.json" } Program structureReused: Completely @@ -221,10 +259,12 @@ Program files:: Semantic diagnostics in builder refreshed for:: /user/username/projects/myproject/XY.ts +/user/username/projects/myproject/link.ts /user/username/projects/myproject/b.ts Shape signatures in builder refreshed for:: /user/username/projects/myproject/xy.ts (computed .d.ts) /user/username/projects/myproject/b.ts (computed .d.ts) +/user/username/projects/myproject/link.ts (computed .d.ts) exitCode:: ExitStatus.undefined diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-directory-symlink-target-and-import-match-disk-with-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-directory-symlink-target-and-import-match-disk-with-link-open.js new file mode 100644 index 0000000000000..b6b97b8c15d63 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-directory-symlink-target-and-import-match-disk-with-link-open.js @@ -0,0 +1,539 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/XY) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./XY/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY/a.ts + Imported via "./XY/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link/a.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/link +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/XY/a.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY/a.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +2: /user/username/projects/myproject/tsconfig.json *new* +3: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne *new* + +Before running Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne + +Invoking Timeout callback:: timeoutId:: 4:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY/a.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-directory-symlink-target-and-import-match-disk-with-target-and-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-directory-symlink-target-and-import-match-disk-with-target-and-link-open.js new file mode 100644 index 0000000000000..a3b9646c69892 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-directory-symlink-target-and-import-match-disk-with-target-and-link-open.js @@ -0,0 +1,592 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/XY) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./XY/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY/a.ts + Imported via "./XY/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/XY +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link/a.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link/a.ts" + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/link +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 6, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY/a.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 6 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-directory-symlink-target-and-import-match-disk-with-target-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-directory-symlink-target-and-import-match-disk-with-target-open.js new file mode 100644 index 0000000000000..f8271704ced48 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-directory-symlink-target-and-import-match-disk-with-target-open.js @@ -0,0 +1,522 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/XY) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./XY/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY/a.ts + Imported via "./XY/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/XY +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link/a.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY/a.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 5 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-directory-symlink-target-and-import-match-disk.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-directory-symlink-target-and-import-match-disk.js new file mode 100644 index 0000000000000..94b768bd8f033 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-directory-symlink-target-and-import-match-disk.js @@ -0,0 +1,475 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/XY) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./XY/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY/a.ts + Imported via "./XY/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 2 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json, Cancelled earlier one +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles*, Cancelled earlier one +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY/a.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +4: /user/username/projects/myproject/tsconfig.json *new* +5: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne *new* + +Before running Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne + +Invoking Timeout callback:: timeoutId:: 6:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY/a.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-file-symlink-target-and-import-match-disk-with-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-file-symlink-target-and-import-match-disk-with-link-open.js new file mode 100644 index 0000000000000..a857291d5ccdd --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-file-symlink-target-and-import-match-disk-with-link-open.js @@ -0,0 +1,535 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/XY.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./XY"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./XY" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/XY.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +2: /user/username/projects/myproject/tsconfig.json *new* +3: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne *new* + +Before running Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne + +Invoking Timeout callback:: timeoutId:: 4:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-file-symlink-target-and-import-match-disk-with-target-and-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-file-symlink-target-and-import-match-disk-with-target-and-link-open.js new file mode 100644 index 0000000000000..ad2efb8cb43bd --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-file-symlink-target-and-import-match-disk-with-target-and-link-open.js @@ -0,0 +1,588 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/XY.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./XY"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./XY" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link.ts" + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 6, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 6 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-file-symlink-target-and-import-match-disk-with-target-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-file-symlink-target-and-import-match-disk-with-target-open.js new file mode 100644 index 0000000000000..6ff45973110d2 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-file-symlink-target-and-import-match-disk-with-target-open.js @@ -0,0 +1,518 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/XY.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./XY"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./XY" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 5 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-file-symlink-target-and-import-match-disk.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-file-symlink-target-and-import-match-disk.js new file mode 100644 index 0000000000000..0a944a30f80fc --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-both-file-symlink-target-and-import-match-disk.js @@ -0,0 +1,471 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/XY.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./XY"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./XY" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 2 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json, Cancelled earlier one +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles*, Cancelled earlier one +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +4: /user/username/projects/myproject/tsconfig.json *new* +5: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne *new* + +Before running Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne + +Invoking Timeout callback:: timeoutId:: 6:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-directory-symlink-target-matches-disk-but-import-does-not-with-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-directory-symlink-target-matches-disk-but-import-does-not-with-link-open.js new file mode 100644 index 0000000000000..eb753a38e6ff7 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-directory-symlink-target-matches-disk-but-import-does-not-with-link-open.js @@ -0,0 +1,539 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/Xy) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./XY/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY/a.ts + Imported via "./XY/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link/a.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/link +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/XY/a.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY/a.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +2: /user/username/projects/myproject/tsconfig.json *new* +3: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne *new* + +Before running Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne + +Invoking Timeout callback:: timeoutId:: 4:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY/a.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-directory-symlink-target-matches-disk-but-import-does-not-with-target-and-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-directory-symlink-target-matches-disk-but-import-does-not-with-target-and-link-open.js new file mode 100644 index 0000000000000..360db10f90049 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-directory-symlink-target-matches-disk-but-import-does-not-with-target-and-link-open.js @@ -0,0 +1,592 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/Xy) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./XY/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY/a.ts + Imported via "./XY/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/XY +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link/a.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link/a.ts" + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/link +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 6, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY/a.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 6 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-directory-symlink-target-matches-disk-but-import-does-not-with-target-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-directory-symlink-target-matches-disk-but-import-does-not-with-target-open.js new file mode 100644 index 0000000000000..f2c5e5e28c28c --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-directory-symlink-target-matches-disk-but-import-does-not-with-target-open.js @@ -0,0 +1,522 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/Xy) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./XY/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY/a.ts + Imported via "./XY/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/XY +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link/a.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY/a.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 5 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-directory-symlink-target-matches-disk-but-import-does-not.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-directory-symlink-target-matches-disk-but-import-does-not.js new file mode 100644 index 0000000000000..695c7d94fe7f3 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-directory-symlink-target-matches-disk-but-import-does-not.js @@ -0,0 +1,475 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/Xy) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./XY/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY/a.ts + Imported via "./XY/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 2 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json, Cancelled earlier one +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles*, Cancelled earlier one +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY/a.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +4: /user/username/projects/myproject/tsconfig.json *new* +5: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne *new* + +Before running Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne + +Invoking Timeout callback:: timeoutId:: 6:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY/a.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-file-symlink-target-matches-disk-but-import-does-not-with-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-file-symlink-target-matches-disk-but-import-does-not-with-link-open.js new file mode 100644 index 0000000000000..57a2d60689c2f --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-file-symlink-target-matches-disk-but-import-does-not-with-link-open.js @@ -0,0 +1,535 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/Xy.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./XY"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./XY" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/XY.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +2: /user/username/projects/myproject/tsconfig.json *new* +3: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne *new* + +Before running Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne + +Invoking Timeout callback:: timeoutId:: 4:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-file-symlink-target-matches-disk-but-import-does-not-with-target-and-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-file-symlink-target-matches-disk-but-import-does-not-with-target-and-link-open.js new file mode 100644 index 0000000000000..b26b11459c0f9 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-file-symlink-target-matches-disk-but-import-does-not-with-target-and-link-open.js @@ -0,0 +1,588 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/Xy.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./XY"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./XY" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link.ts" + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 6, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 6 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-file-symlink-target-matches-disk-but-import-does-not-with-target-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-file-symlink-target-matches-disk-but-import-does-not-with-target-open.js new file mode 100644 index 0000000000000..3a9ee1aaec5af --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-file-symlink-target-matches-disk-but-import-does-not-with-target-open.js @@ -0,0 +1,518 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/Xy.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./XY"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./XY" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 5 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-file-symlink-target-matches-disk-but-import-does-not.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-file-symlink-target-matches-disk-but-import-does-not.js new file mode 100644 index 0000000000000..cc185ee7d9208 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-file-symlink-target-matches-disk-but-import-does-not.js @@ -0,0 +1,471 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/Xy.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./XY"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./XY" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 2 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json, Cancelled earlier one +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles*, Cancelled earlier one +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +4: /user/username/projects/myproject/tsconfig.json *new* +5: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne *new* + +Before running Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne + +Invoking Timeout callback:: timeoutId:: 6:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./XY\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-directory-symlink-target,-and-disk-are-all-different-with-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-directory-symlink-target,-and-disk-are-all-different-with-link-open.js new file mode 100644 index 0000000000000..305e0592db09a --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-directory-symlink-target,-and-disk-are-all-different-with-link-open.js @@ -0,0 +1,567 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/Xy) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./xY/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/xY/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./xY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + xY/a.ts + Imported via "./xY/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link/a.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/link +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/XY/a.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/xY/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./xY/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY/a.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +2: /user/username/projects/myproject/tsconfig.json *new* +3: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne *new* + +Before running Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne + +Invoking Timeout callback:: timeoutId:: 4:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/xY/a.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./xY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/xY/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./xY/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-directory-symlink-target,-and-disk-are-all-different-with-target-and-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-directory-symlink-target,-and-disk-are-all-different-with-target-and-link-open.js new file mode 100644 index 0000000000000..da965ea0dc106 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-directory-symlink-target,-and-disk-are-all-different-with-target-and-link-open.js @@ -0,0 +1,620 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/Xy) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./xY/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/xY/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./xY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + xY/a.ts + Imported via "./xY/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/XY +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link/a.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link/a.ts" + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/link +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/xY/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./xY/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 6, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/xY/a.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./xY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/xY/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./xY/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 6 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-directory-symlink-target,-and-disk-are-all-different-with-target-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-directory-symlink-target,-and-disk-are-all-different-with-target-open.js new file mode 100644 index 0000000000000..49db2d10624ad --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-directory-symlink-target,-and-disk-are-all-different-with-target-open.js @@ -0,0 +1,550 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/Xy) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./xY/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/xY/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./xY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + xY/a.ts + Imported via "./xY/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/XY +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link/a.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/xY/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./xY/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/xY/a.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./xY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/xY/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./xY/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 5 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-directory-symlink-target,-and-disk-are-all-different.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-directory-symlink-target,-and-disk-are-all-different.js new file mode 100644 index 0000000000000..cb15d241f885b --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-directory-symlink-target,-and-disk-are-all-different.js @@ -0,0 +1,503 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/Xy) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./xY/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/xY/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./xY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + xY/a.ts + Imported via "./xY/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/xY/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./xY/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 2 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json, Cancelled earlier one +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles*, Cancelled earlier one +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY/a.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +4: /user/username/projects/myproject/tsconfig.json *new* +5: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne *new* + +Before running Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne + +Invoking Timeout callback:: timeoutId:: 6:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/xY/a.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./xY/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/xY/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./xY/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-file-symlink-target,-and-disk-are-all-different-with-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-file-symlink-target,-and-disk-are-all-different-with-link-open.js new file mode 100644 index 0000000000000..1bb0f98a9a554 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-file-symlink-target,-and-disk-are-all-different-with-link-open.js @@ -0,0 +1,563 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/Xy.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./xY"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./xY\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./xY" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/XY.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/xY.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./xY\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +2: /user/username/projects/myproject/tsconfig.json *new* +3: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne *new* + +Before running Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne + +Invoking Timeout callback:: timeoutId:: 4:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./xY\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/xY.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./xY\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-file-symlink-target,-and-disk-are-all-different-with-target-and-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-file-symlink-target,-and-disk-are-all-different-with-target-and-link-open.js new file mode 100644 index 0000000000000..22fdc6facc07f --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-file-symlink-target,-and-disk-are-all-different-with-target-and-link-open.js @@ -0,0 +1,616 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/Xy.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./xY"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./xY\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./xY" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link.ts" + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/xY.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./xY\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 6, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./xY\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/xY.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./xY\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 6 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-file-symlink-target,-and-disk-are-all-different-with-target-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-file-symlink-target,-and-disk-are-all-different-with-target-open.js new file mode 100644 index 0000000000000..46387b5bf2aac --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-file-symlink-target,-and-disk-are-all-different-with-target-open.js @@ -0,0 +1,546 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/Xy.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./xY"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./xY\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./xY" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/xY.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./xY\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./xY\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/xY.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./xY\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 5 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-file-symlink-target,-and-disk-are-all-different.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-file-symlink-target,-and-disk-are-all-different.js new file mode 100644 index 0000000000000..467025d3c1268 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import,-file-symlink-target,-and-disk-are-all-different.js @@ -0,0 +1,499 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/Xy.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./xY"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./xY\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./xY" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/xY.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./xY\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 2 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json, Cancelled earlier one +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles*, Cancelled earlier one +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +4: /user/username/projects/myproject/tsconfig.json *new* +5: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne *new* + +Before running Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne + +Invoking Timeout callback:: timeoutId:: 6:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./xY\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/xY.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./xY\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-directory-symlink-target-agree-but-do-not-match-disk-with-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-directory-symlink-target-agree-but-do-not-match-disk-with-link-open.js new file mode 100644 index 0000000000000..f2c0e32f88fcb --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-directory-symlink-target-agree-but-do-not-match-disk-with-link-open.js @@ -0,0 +1,567 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/Xy) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./Xy/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/Xy/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + Xy/a.ts + Imported via "./Xy/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link/a.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/link +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/XY/a.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./Xy/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY/a.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +2: /user/username/projects/myproject/tsconfig.json *new* +3: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne *new* + +Before running Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne + +Invoking Timeout callback:: timeoutId:: 4:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/Xy/a.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./Xy/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-directory-symlink-target-agree-but-do-not-match-disk-with-target-and-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-directory-symlink-target-agree-but-do-not-match-disk-with-target-and-link-open.js new file mode 100644 index 0000000000000..361dfc1691e60 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-directory-symlink-target-agree-but-do-not-match-disk-with-target-and-link-open.js @@ -0,0 +1,620 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/Xy) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./Xy/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/Xy/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + Xy/a.ts + Imported via "./Xy/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/XY +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link/a.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link/a.ts" + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/link +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./Xy/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 6, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/Xy/a.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./Xy/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 6 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-directory-symlink-target-agree-but-do-not-match-disk-with-target-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-directory-symlink-target-agree-but-do-not-match-disk-with-target-open.js new file mode 100644 index 0000000000000..791b90f7b94e9 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-directory-symlink-target-agree-but-do-not-match-disk-with-target-open.js @@ -0,0 +1,550 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/Xy) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./Xy/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/Xy/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + Xy/a.ts + Imported via "./Xy/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/XY +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link/a.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./Xy/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/Xy/a.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./Xy/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 5 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-directory-symlink-target-agree-but-do-not-match-disk.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-directory-symlink-target-agree-but-do-not-match-disk.js new file mode 100644 index 0000000000000..01d2688a10f3f --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-directory-symlink-target-agree-but-do-not-match-disk.js @@ -0,0 +1,503 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/Xy) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./Xy/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/Xy/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + Xy/a.ts + Imported via "./Xy/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./Xy/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 2 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json, Cancelled earlier one +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles*, Cancelled earlier one +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY/a.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +4: /user/username/projects/myproject/tsconfig.json *new* +5: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne *new* + +Before running Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne + +Invoking Timeout callback:: timeoutId:: 6:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/Xy/a.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./Xy/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-file-symlink-target-agree-but-do-not-match-disk-with-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-file-symlink-target-agree-but-do-not-match-disk-with-link-open.js new file mode 100644 index 0000000000000..b8ad97fb33b41 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-file-symlink-target-agree-but-do-not-match-disk-with-link-open.js @@ -0,0 +1,563 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/Xy.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./Xy"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./Xy" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/XY.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./Xy\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +2: /user/username/projects/myproject/tsconfig.json *new* +3: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne *new* + +Before running Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne + +Invoking Timeout callback:: timeoutId:: 4:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./Xy\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-file-symlink-target-agree-but-do-not-match-disk-with-target-and-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-file-symlink-target-agree-but-do-not-match-disk-with-target-and-link-open.js new file mode 100644 index 0000000000000..ebbd10f82fe21 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-file-symlink-target-agree-but-do-not-match-disk-with-target-and-link-open.js @@ -0,0 +1,616 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/Xy.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./Xy"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./Xy" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link.ts" + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./Xy\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 6, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./Xy\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 6 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-file-symlink-target-agree-but-do-not-match-disk-with-target-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-file-symlink-target-agree-but-do-not-match-disk-with-target-open.js new file mode 100644 index 0000000000000..2a720542d63ad --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-file-symlink-target-agree-but-do-not-match-disk-with-target-open.js @@ -0,0 +1,546 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/Xy.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./Xy"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./Xy" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./Xy\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./Xy\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 5 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-file-symlink-target-agree-but-do-not-match-disk.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-file-symlink-target-agree-but-do-not-match-disk.js new file mode 100644 index 0000000000000..f9ed6671dfdb2 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-and-file-symlink-target-agree-but-do-not-match-disk.js @@ -0,0 +1,499 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/Xy.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./Xy"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./Xy" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./Xy\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 2 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json, Cancelled earlier one +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles*, Cancelled earlier one +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +4: /user/username/projects/myproject/tsconfig.json *new* +5: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne *new* + +Before running Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne + +Invoking Timeout callback:: timeoutId:: 6:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./Xy\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-directory-symlink-target-does-not-with-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-directory-symlink-target-does-not-with-link-open.js new file mode 100644 index 0000000000000..096fb98d0a9ba --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-directory-symlink-target-does-not-with-link-open.js @@ -0,0 +1,567 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/XY) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./Xy/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/Xy/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + Xy/a.ts + Imported via "./Xy/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link/a.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/link +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/XY/a.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./Xy/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY/a.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +2: /user/username/projects/myproject/tsconfig.json *new* +3: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne *new* + +Before running Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne + +Invoking Timeout callback:: timeoutId:: 4:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/Xy/a.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./Xy/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-directory-symlink-target-does-not-with-target-and-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-directory-symlink-target-does-not-with-target-and-link-open.js new file mode 100644 index 0000000000000..52b932f608c31 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-directory-symlink-target-does-not-with-target-and-link-open.js @@ -0,0 +1,620 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/XY) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./Xy/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/Xy/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + Xy/a.ts + Imported via "./Xy/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/XY +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link/a.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link/a.ts" + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/link +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./Xy/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 6, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/Xy/a.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./Xy/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 6 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-directory-symlink-target-does-not-with-target-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-directory-symlink-target-does-not-with-target-open.js new file mode 100644 index 0000000000000..f8530f48bc607 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-directory-symlink-target-does-not-with-target-open.js @@ -0,0 +1,550 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/XY) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./Xy/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/Xy/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + Xy/a.ts + Imported via "./Xy/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject/XY +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY/a.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY/a.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link/a.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY/a.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./Xy/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY/a.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/Xy/a.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./Xy/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 5 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-directory-symlink-target-does-not.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-directory-symlink-target-does-not.js new file mode 100644 index 0000000000000..ed702a9d977fb --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-directory-symlink-target-does-not.js @@ -0,0 +1,503 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY/a.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link] symlink(/user/username/projects/myproject/XY) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./Xy/a"; +import { b } from "./link/a"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "out.js", + "module": "system" + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/XY/a.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "outFile": "/user/username/projects/myproject/out.js", + "module": 4, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/Xy/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + Xy/a.ts + Imported via "./Xy/a" from file 'b.ts' + Matched by default include pattern '**/*' + link/a.ts + Imported via "./link/a" from file 'b.ts' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 144, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "outFile": "", + "module": "system" + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY/a.ts: *new* + {} +/user/username/projects/myproject/link/a.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./Xy/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 2 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY/a.ts 1:: WatchInfo: /user/username/projects/myproject/XY/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json, Cancelled earlier one +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles*, Cancelled earlier one +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link/a.ts 1:: WatchInfo: /user/username/projects/myproject/link/a.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY/a.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +4: /user/username/projects/myproject/tsconfig.json *new* +5: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne *new* + +Before running Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne + +Invoking Timeout callback:: timeoutId:: 6:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/Xy/a.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link/a.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy/a\";\nimport { b } from \"./link/a\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY/a.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link/a.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 27 + }, + "text": "Already included file name '/user/username/projects/myproject/Xy/a.ts' differs from file name '/user/username/projects/myproject/XY/a.ts' only in casing.\n The file is in the program because:\n Imported via \"./Xy/a\" from file '/user/username/projects/myproject/b.ts'\n Matched by default include pattern '**/*'", + "code": 1261, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-file-symlink-target-does-not-with-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-file-symlink-target-does-not-with-link-open.js new file mode 100644 index 0000000000000..e3aa0966eccb8 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-file-symlink-target-does-not-with-link-open.js @@ -0,0 +1,563 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/XY.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./Xy"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./Xy" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/XY.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./Xy\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +2: /user/username/projects/myproject/tsconfig.json *new* +3: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne *new* + +Before running Timeout callback:: count: 3 +2: /user/username/projects/myproject/tsconfig.json +3: *ensureProjectForOpenFiles* +4: checkOne + +Invoking Timeout callback:: timeoutId:: 4:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./Xy\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-file-symlink-target-does-not-with-target-and-link-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-file-symlink-target-does-not-with-target-and-link-open.js new file mode 100644 index 0000000000000..f96d002cab477 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-file-symlink-target-does-not-with-target-and-link-open.js @@ -0,0 +1,616 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/XY.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./Xy"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./Xy" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/link.ts" + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/link.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/link.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/link.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./Xy\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 4 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts (Open) + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 6, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./Xy\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 6 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-file-symlink-target-does-not-with-target-open.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-file-symlink-target-does-not-with-target-open.js new file mode 100644 index 0000000000000..8a84f332124ce --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-file-symlink-target-does-not-with-target-open.js @@ -0,0 +1,546 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/XY.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./Xy"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./Xy" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts" + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/XY.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/XY.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/link.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatches *deleted*:: +/user/username/projects/myproject/XY.ts: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + open: true *changed* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./Xy\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "change", + "arguments": { + "file": "/user/username/projects/myproject/XY.ts", + "line": 1, + "offset": 1, + "endLine": 1, + "endOffset": 1, + "insertString": "// some comment\n" + }, + "seq": 4, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts (Open) *changed* + version: SVC-2-1 *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 5, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +2: checkOne *new* + +Before running Timeout callback:: count: 1 +2: checkOne + +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts SVC-2-1 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./Xy\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 5 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-file-symlink-target-does-not.js b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-file-symlink-target-does-not.js new file mode 100644 index 0000000000000..f8f3ca89e9b71 --- /dev/null +++ b/tests/baselines/reference/tsserver/forceConsistentCasingInFileNames/when-import-matches-disk-but-file-symlink-target-does-not.js @@ -0,0 +1,499 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +Before request +//// [/user/username/projects/myproject/XY.ts] +export const a = 1; +export const b = 2; + + +//// [/user/username/projects/myproject/link.ts] symlink(/user/username/projects/myproject/XY.ts) +//// [/user/username/projects/myproject/b.ts] +import { a } from "./Xy"; +import { b } from "./link"; + +a;b; + + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + +//// [/user/username/projects/myproject/tsconfig.json] +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true + } +} + + +Info seq [hh:mm:ss:mss] request: + { + "command": "open", + "arguments": { + "file": "/user/username/projects/myproject/b.ts" + }, + "seq": 1, + "type": "request" + } +Info seq [hh:mm:ss:mss] Search path: /user/username/projects/myproject +Info seq [hh:mm:ss:mss] For info: /user/username/projects/myproject/b.ts :: Config file name: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json", + "reason": "Creating possible configured project for /user/username/projects/myproject/b.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/tsconfig.json : { + "rootNames": [ + "/user/username/projects/myproject/XY.ts", + "/user/username/projects/myproject/b.ts", + "/user/username/projects/myproject/link.ts" + ], + "options": { + "forceConsistentCasingInFileNames": true, + "configFilePath": "/user/username/projects/myproject/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Config: /user/username/projects/myproject/tsconfig.json WatchType: Wild card directory +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-1 "export const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy\";\nimport { b } from \"./link\";\n\na;b;\n" + + + ../../../../a/lib/lib.d.ts + Default library for target 'es5' + XY.ts + Matched by default include pattern '**/*' + Imported via "./Xy" from file 'b.ts' + link.ts + Imported via "./link" from file 'b.ts' + Matched by default include pattern '**/*' + b.ts + Matched by default include pattern '**/*' + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/user/username/projects/myproject/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "telemetry", + "body": { + "telemetryEventName": "projectInfo", + "payload": { + "projectId": "4a33d78ee40d836c4f4e64c59aed976628aea0013be9585c5ff171dfc41baf98", + "fileStats": { + "js": 0, + "jsSize": 0, + "jsx": 0, + "jsxSize": 0, + "ts": 3, + "tsSize": 140, + "tsx": 0, + "tsxSize": 0, + "dts": 1, + "dtsSize": 334, + "deferred": 0, + "deferredSize": 0 + }, + "compilerOptions": { + "forceConsistentCasingInFileNames": true + }, + "typeAcquisition": { + "enable": false, + "include": false, + "exclude": false + }, + "extends": false, + "files": false, + "include": false, + "exclude": false, + "compileOnSave": false, + "configFileName": "tsconfig.json", + "projectType": "configured", + "languageServiceEnabled": true, + "version": "FakeVersion" + } + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/user/username/projects/myproject/b.ts", + "configFile": "/user/username/projects/myproject/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/b.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/XY.ts: *new* + {} +/user/username/projects/myproject/link.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a/lib/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *new* + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before request + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 2, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 1 +1: checkOne *new* + +Before running Timeout callback:: count: 1 +1: checkOne + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 0 + +Immedidate callback:: count: 1 +1: semanticCheck *new* + +Before running Immedidate callback:: count: 1 +1: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./Xy\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +2: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +2: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 2 + } + } +After running Immedidate callback:: count: 0 + +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/XY.ts 1:: WatchInfo: /user/username/projects/myproject/XY.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Scheduled: /user/username/projects/myproject/tsconfig.json, Cancelled earlier one +Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles*, Cancelled earlier one +Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/link.ts 1:: WatchInfo: /user/username/projects/myproject/link.ts 500 undefined WatchType: Closed Script info +Before request +//// [/user/username/projects/myproject/XY.ts] +// some comment +export const a = 1; +export const b = 2; + + + +Timeout callback:: count: 2 +4: /user/username/projects/myproject/tsconfig.json *new* +5: *ensureProjectForOpenFiles* *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *changed* + version: Text-1 + pendingReloadFromDisk: true *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Info seq [hh:mm:ss:mss] request: + { + "command": "geterr", + "arguments": { + "delay": 0, + "files": [ + "/user/username/projects/myproject/b.ts" + ] + }, + "seq": 3, + "type": "request" + } +Info seq [hh:mm:ss:mss] response: + { + "responseRequired": false + } +After request + +Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne *new* + +Before running Timeout callback:: count: 3 +4: /user/username/projects/myproject/tsconfig.json +5: *ensureProjectForOpenFiles* +6: checkOne + +Invoking Timeout callback:: timeoutId:: 6:: checkOne +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (4) + /a/lib/lib.d.ts Text-1 "/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }" + /user/username/projects/myproject/XY.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/link.ts Text-2 "// some comment\nexport const a = 1;\nexport const b = 2;\n" + /user/username/projects/myproject/b.ts SVC-1-0 "import { a } from \"./Xy\";\nimport { b } from \"./link\";\n\na;b;\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "syntaxDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +After running Timeout callback:: count: 2 + +Immedidate callback:: count: 1 +3: semanticCheck *new* + +Projects:: +/user/username/projects/myproject/tsconfig.json (Configured) *changed* + projectStateVersion: 2 + projectProgramVersion: 1 + dirty: false *changed* + +ScriptInfos:: +/a/lib/lib.d.ts + version: Text-1 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/XY.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json +/user/username/projects/myproject/b.ts (Open) + version: SVC-1-0 + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json *default* +/user/username/projects/myproject/link.ts *changed* + version: Text-2 *changed* + pendingReloadFromDisk: false *changed* + containingProjects: 1 + /user/username/projects/myproject/tsconfig.json + +Before running Immedidate callback:: count: 1 +3: semanticCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "semanticDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [ + { + "start": { + "line": 1, + "offset": 19 + }, + "end": { + "line": 1, + "offset": 25 + }, + "text": "File name '/user/username/projects/myproject/Xy.ts' differs from already included file name '/user/username/projects/myproject/XY.ts' only in casing.\n The file is in the program because:\n Matched by default include pattern '**/*'\n Imported via \"./Xy\" from file '/user/username/projects/myproject/b.ts'", + "code": 1149, + "category": "error" + } + ] + } + } +After running Immedidate callback:: count: 1 + +Immedidate callback:: count: 1 +4: suggestionCheck *new* + +Before running Immedidate callback:: count: 1 +4: suggestionCheck + +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "suggestionDiag", + "body": { + "file": "/user/username/projects/myproject/b.ts", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "requestCompleted", + "body": { + "request_seq": 3 + } + } +After running Immedidate callback:: count: 0 diff --git a/tests/baselines/reference/tsserver/symLinks/module-resolution-with-path-mapping-when-project-compiles-from-sources.js b/tests/baselines/reference/tsserver/symLinks/module-resolution-with-path-mapping-when-project-compiles-from-sources.js index 9a29b0c5f9317..d7d0add257e62 100644 --- a/tests/baselines/reference/tsserver/symLinks/module-resolution-with-path-mapping-when-project-compiles-from-sources.js +++ b/tests/baselines/reference/tsserver/symLinks/module-resolution-with-path-mapping-when-project-compiles-from-sources.js @@ -364,6 +364,9 @@ Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Triggered with /users/ Info seq [hh:mm:ss:mss] DirectoryWatcher:: Triggered with /users/username/projects/myproject/javascript/packages/recognizers-date-time/node_modules/@microsoft :: WatchInfo: /users/username/projects/myproject/javascript/packages/recognizers-date-time/node_modules 1 undefined Project: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json WatchType: Failed Lookup Locations Info seq [hh:mm:ss:mss] Scheduled: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.jsonFailedLookupInvalidation, Cancelled earlier one Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Triggered with /users/username/projects/myproject/javascript/packages/recognizers-date-time/node_modules/@microsoft :: WatchInfo: /users/username/projects/myproject/javascript/packages/recognizers-date-time/node_modules 1 undefined Project: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json WatchType: Failed Lookup Locations +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Triggered with /users/username/projects/myproject/javascript/packages/recognizers-text :: WatchInfo: /users/username/projects/myproject/javascript/packages/recognizers-text 1 undefined Project: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json WatchType: Failed Lookup Locations +Info seq [hh:mm:ss:mss] Scheduled: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.jsonFailedLookupInvalidation, Cancelled earlier one +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Triggered with /users/username/projects/myproject/javascript/packages/recognizers-text :: WatchInfo: /users/username/projects/myproject/javascript/packages/recognizers-text 1 undefined Project: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json WatchType: Failed Lookup Locations Info seq [hh:mm:ss:mss] DirectoryWatcher:: Triggered with /users/username/projects/myproject/javascript/packages/recognizers-date-time/node_modules/@microsoft/recognizers-text :: WatchInfo: /users/username/projects/myproject/javascript/packages/recognizers-date-time/node_modules 1 undefined Project: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json WatchType: Failed Lookup Locations Info seq [hh:mm:ss:mss] Scheduled: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.jsonFailedLookupInvalidation, Cancelled earlier one Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Triggered with /users/username/projects/myproject/javascript/packages/recognizers-date-time/node_modules/@microsoft/recognizers-text :: WatchInfo: /users/username/projects/myproject/javascript/packages/recognizers-date-time/node_modules 1 undefined Project: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json WatchType: Failed Lookup Locations @@ -377,7 +380,7 @@ Info seq [hh:mm:ss:mss] DirectoryWatcher:: Triggered with /users/username/proje Info seq [hh:mm:ss:mss] Scheduled: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.jsonFailedLookupInvalidation, Cancelled earlier one Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Triggered with /users/username/projects/myproject/javascript/packages/recognizers-text/dist/types/recognizers-text.d.ts :: WatchInfo: /users/username/projects/myproject/javascript/packages/recognizers-text 1 undefined Project: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json WatchType: Failed Lookup Locations Before running Timeout callback:: count: 1 -8: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.jsonFailedLookupInvalidation +9: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.jsonFailedLookupInvalidation //// [/users/username/projects/myproject/javascript/packages/recognizers-date-time/node_modules/@microsoft/recognizers-text] symlink(/users/username/projects/myproject/javascript/packages/recognizers-text) //// [/users/username/projects/myproject/javascript/packages/recognizers-text/dist/types/recognizers-text.d.ts] export class C { method(): number; } @@ -426,7 +429,7 @@ FsWatchesRecursive:: {} Timeout callback:: count: 1 -8: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.jsonFailedLookupInvalidation *new* +9: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.jsonFailedLookupInvalidation *new* Info seq [hh:mm:ss:mss] Running: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.jsonFailedLookupInvalidation Info seq [hh:mm:ss:mss] Scheduled: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json @@ -434,8 +437,8 @@ Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* After running Timeout callback:: count: 2 Timeout callback:: count: 2 -9: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json *new* -10: *ensureProjectForOpenFiles* *new* +10: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json *new* +11: *ensureProjectForOpenFiles* *new* Projects:: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json (Configured) *changed* @@ -444,8 +447,8 @@ Projects:: dirty: true *changed* Before running Timeout callback:: count: 2 -9: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json -10: *ensureProjectForOpenFiles* +10: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json +11: *ensureProjectForOpenFiles* Info seq [hh:mm:ss:mss] Running: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json @@ -596,10 +599,10 @@ Info seq [hh:mm:ss:mss] response: After request Timeout callback:: count: 1 -11: checkOne *new* +12: checkOne *new* Before running Timeout callback:: count: 1 -11: checkOne +12: checkOne Info seq [hh:mm:ss:mss] event: { @@ -663,8 +666,8 @@ Info seq [hh:mm:ss:mss] Scheduled: /users/username/projects/myproject/javascrip Info seq [hh:mm:ss:mss] Scheduled: *ensureProjectForOpenFiles* Info seq [hh:mm:ss:mss] Elapsed:: *ms FileWatcher:: Triggered with /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json 1:: WatchInfo: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json 2000 undefined Project: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json WatchType: Config file Before running Timeout callback:: count: 2 -12: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json -13: *ensureProjectForOpenFiles* +13: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json +14: *ensureProjectForOpenFiles* //// [/users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json] { "compilerOptions": { @@ -684,8 +687,8 @@ Before running Timeout callback:: count: 2 Timeout callback:: count: 2 -12: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json *new* -13: *ensureProjectForOpenFiles* *new* +13: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json *new* +14: *ensureProjectForOpenFiles* *new* Projects:: /users/username/projects/myproject/javascript/packages/recognizers-date-time/tsconfig.json (Configured) *changed*