Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
ignore casing when converting a source file path to relative path
  • Loading branch information
zhengbli committed Jun 16, 2016
commit 478d76347b17c30104c766c0d73b229464d73eff
4 changes: 3 additions & 1 deletion src/compiler/utilities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2330,7 +2330,9 @@ namespace ts {

export function getSourceFilePathInNewDir(sourceFile: SourceFile, host: EmitHost, newDirPath: string) {
let sourceFilePath = getNormalizedAbsolutePath(sourceFile.fileName, host.getCurrentDirectory());
sourceFilePath = sourceFilePath.replace(host.getCommonSourceDirectory(), "");
const commonSourceDirectory = host.getCommonSourceDirectory();
const isSourceFileInCommonSourceDirectory = sourceFilePath.toLowerCase().indexOf(commonSourceDirectory.toLowerCase()) === 0;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This shouldn't be done without checking ignoreCase option in compilerOptions

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I only found a forceConsistentCasingInFileNames option in the compilerOptions. Is that what you are referring to?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Meant usage of getCanonicalFileName instead to handle the casing option just like the way we do in relative name computation or common directory name compuation.

Copy link
Copy Markdown
Contributor Author

@zhengbli zhengbli Jun 17, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The case sensitivity used by getCanonicalFileName is actually not very trustable, because we tell the file system case sensitivity solely by OS. However, in some cases this is wrong, for example network mounted file system on Windows, or HFS / HFS+ on OSX. Relying on it has caused many troubles previously when dealing with file watching. So I think it might be better if we only use the canonical file name internally for comparison purpose, but not when directly talking to the file system.

sourceFilePath = isSourceFileInCommonSourceDirectory ? sourceFilePath.substring(commonSourceDirectory.length) : sourceFilePath;
return combinePaths(newDirPath, sourceFilePath);
}

Expand Down