Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
f9ae3e4
Initial support for globs in tsconfig.json
rbuckton Dec 3, 2015
30575db
Added caching, more tests
rbuckton Dec 7, 2015
5de2fcc
Merge branch 'master' into glob2
rbuckton Dec 7, 2015
def3ba1
Added stubs to ChakraHost interface for readDirectoryNames/readFileNames
rbuckton Dec 7, 2015
c3c3bca
Fixed typos in comments
rbuckton Dec 8, 2015
bf9af46
Changed name of 'reduce' method added to FileSet
rbuckton Dec 8, 2015
d857250
Heavily revised implementation that relies on an updated 'readDirecto…
rbuckton Dec 14, 2015
247657f
Merge branch 'master' into glob2
rbuckton Dec 15, 2015
94a5327
more tests
rbuckton Dec 16, 2015
6f85fe9
Minor update to shims.ts for forthcoming VS support for globs.
rbuckton Dec 16, 2015
d23df34
Detailed comments for regular expressions and renamed some files.
rbuckton Dec 16, 2015
c224917
Comment cleanup
rbuckton Jan 4, 2016
cde12ef
Merge branch 'master' into glob2
rbuckton Jan 4, 2016
c1205eb
Fixed new linter warnings
rbuckton Jan 5, 2016
084b94c
Merge branch 'master' into glob2
riknoll May 26, 2016
db85643
Fixing linter and test errors
riknoll May 26, 2016
c340c88
Bringing back excludes error and fixing faulty test
riknoll May 26, 2016
50f0033
Merge branch 'master' into glob2_merged
riknoll May 26, 2016
aa5c51c
Fixing lint errors
riknoll May 26, 2016
0415b95
Passing regular expressions to native hosts
riknoll May 31, 2016
08ca1c0
Merge branch 'master' into glob2_merged
riknoll Jun 17, 2016
86cde9e
Updating readDirectory for tsserverProjectSystem unit tests
riknoll Jun 17, 2016
95072aa
Responding to PR feedback
riknoll Jun 18, 2016
f817ffa
Merge branch 'master' into glob2_merged
riknoll Jun 18, 2016
f73ed59
Adding more matchFiles test cases
riknoll Jun 20, 2016
b49acd5
Merge branch 'master' into glob2_merged
riknoll Jun 20, 2016
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
Prev Previous commit
Next Next commit
Bringing back excludes error and fixing faulty test
  • Loading branch information
riknoll committed May 26, 2016
commit c340c88706939febc9e6a52f28e3089b94294973
3 changes: 3 additions & 0 deletions src/compiler/commandLineParser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -713,6 +713,9 @@ namespace ts {
errors.push(createCompilerDiagnostic(Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "exclude", "Array"));
}
}
else if (hasProperty(json, "excludes")) {
errors.push(createCompilerDiagnostic(Diagnostics.Unknown_option_excludes_Did_you_mean_exclude));
}
else {
// By default, exclude common package folders
excludeSpecs = ["node_modules", "bower_components", "jspm_packages"];
Expand Down
26 changes: 26 additions & 0 deletions src/harness/virtualFileSystem.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/// <reference path="harness.ts" />
/// <reference path="..\compiler\commandLineParser.ts"/>
namespace Utils {
export class VirtualFileSystemEntry {
fileSystem: VirtualFileSystem;
Expand Down Expand Up @@ -157,4 +158,29 @@ namespace Utils {
return directory;
}
}

export class MockParseConfigHost extends VirtualFileSystem implements ts.ParseConfigHost {
constructor(currentDirectory: string, ignoreCase: boolean, files: string[]) {
super(currentDirectory, ignoreCase);
for (const file of files) {
this.addFile(file);
}
}

readDirectory(path: string, extensions: string[], excludes: string[], includes: string[]) {
return ts.matchFiles(path, extensions, excludes, includes, this.useCaseSensitiveFileNames, this.currentDirectory, (path: string) => this.getAccessibleFileSystemEntries(path));
}

getAccessibleFileSystemEntries(path: string) {
const entry = this.traversePath(path);
if (entry && entry.isDirectory()) {
const directory = <VirtualDirectory>entry;
return {
files: ts.map(directory.getFiles(), f => f.name),
directories: ts.map(directory.getDirectories(), d => d.name)
};
}
return { files: [], directories: [] };
}
}
}
31 changes: 3 additions & 28 deletions tests/cases/unittests/matchFiles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,33 +3,8 @@
/// <reference path="..\..\..\src\harness\virtualFileSystem.ts" />

namespace ts {
class MockParseConfigHost extends Utils.VirtualFileSystem implements ParseConfigHost {
constructor(currentDirectory: string, ignoreCase: boolean, files: string[]) {
super(currentDirectory, ignoreCase);
for (const file of files) {
this.addFile(file);
}
}

readDirectory(path: string, extensions: string[], excludes: string[], includes: string[]) {
return matchFiles(path, extensions, excludes, includes, this.useCaseSensitiveFileNames, this.currentDirectory, (path: string) => this.getAccessibleFileSystemEntries(path));
}

getAccessibleFileSystemEntries(path: string) {
const entry = this.traversePath(path);
if (entry && entry.isDirectory()) {
const directory = <Utils.VirtualDirectory>entry;
return {
files: map(directory.getFiles(), f => f.name),
directories: map(directory.getDirectories(), d => d.name)
};
}
return { files: [], directories: [] };
}
}

const caseInsensitiveBasePath = "c:/dev/";
const caseInsensitiveHost = new MockParseConfigHost(caseInsensitiveBasePath, /*useCaseSensitiveFileNames*/ false, [
const caseInsensitiveHost = new Utils.MockParseConfigHost(caseInsensitiveBasePath, /*useCaseSensitiveFileNames*/ false, [
"c:/dev/a.ts",
"c:/dev/a.d.ts",
"c:/dev/a.js",
Expand All @@ -53,7 +28,7 @@ namespace ts {
]);

const caseSensitiveBasePath = "/dev/";
const caseSensitiveHost = new MockParseConfigHost(caseSensitiveBasePath, /*useCaseSensitiveFileNames*/ true, [
const caseSensitiveHost = new Utils.MockParseConfigHost(caseSensitiveBasePath, /*useCaseSensitiveFileNames*/ true, [
"/dev/a.ts",
"/dev/a.d.ts",
"/dev/a.js",
Expand All @@ -76,7 +51,7 @@ namespace ts {
"/dev/js/b.js",
]);

const caseInsensitiveMixedExtensionHost = new MockParseConfigHost(caseInsensitiveBasePath, /*useCaseSensitiveFileNames*/ false, [
const caseInsensitiveMixedExtensionHost = new Utils.MockParseConfigHost(caseInsensitiveBasePath, /*useCaseSensitiveFileNames*/ false, [
"c:/dev/a.ts",
"c:/dev/a.d.ts",
"c:/dev/a.js",
Expand Down
42 changes: 9 additions & 33 deletions tests/cases/unittests/tsconfigParsing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,6 @@
/// <reference path="..\..\..\src\compiler\commandLineParser.ts" />

namespace ts {
class MockParseConfigHost extends Utils.VirtualFileSystem implements ParseConfigHost {
constructor(currentDirectory: string, ignoreCase: boolean, files: string[]) {
super(currentDirectory, ignoreCase);
for (const file of files) {
this.addFile(file);
}
}

readDirectory(path: string, extensions: string[], excludes: string[], includes: string[]) {
return matchFiles(path, extensions, excludes, includes, this.useCaseSensitiveFileNames, this.currentDirectory, (path: string) => this.getAccessibleFileSystemEntries(path));
}

getAccessibleFileSystemEntries(path: string) {
const entry = this.traversePath(path);
if (entry && entry.isDirectory()) {
const directory = <Utils.VirtualDirectory>entry;
return {
files: map(directory.getFiles(), f => f.name),
directories: map(directory.getDirectories(), d => d.name)
};
}
return { files: [], directories: [] };
}
}

describe('parseConfigFileTextToJson', () => {
function assertParseResult(jsonText: string, expectedConfigObject: { config?: any; error?: Diagnostic }) {
let parsed = ts.parseConfigFileTextToJson("/apath/tsconfig.json", jsonText);
Expand All @@ -41,13 +16,14 @@ namespace ts {

function assertParseErrorWithExcludesKeyword(jsonText: string) {
let parsed = ts.parseConfigFileTextToJson("/apath/tsconfig.json", jsonText);
let parsedCommand = ts.parseJsonConfigFileContent(parsed, ts.sys, "tests/cases/unittests");
assert.isTrue(undefined !== parsedCommand.errors);
let parsedCommand = ts.parseJsonConfigFileContent(parsed.config, ts.sys, "tests/cases/unittests");
assert.isTrue(parsedCommand.errors && parsedCommand.errors.length === 1 &&
parsedCommand.errors[0].code === ts.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude.code);
}

function assertParseFileList(jsonText: string, configFileName: string, basePath: string, allFileList: string[], expectedFileList: string[]) {
const json = JSON.parse(jsonText);
const host: ParseConfigHost = new MockParseConfigHost(basePath, true, allFileList);
const host: ParseConfigHost = new Utils.MockParseConfigHost(basePath, true, allFileList);
const parsed = ts.parseJsonConfigFileContent(json, host, basePath, /*existingOptions*/ undefined, configFileName);
assert.isTrue(arrayIsEqualTo(parsed.fileNames.sort(), expectedFileList.sort()));
}
Expand Down Expand Up @@ -125,27 +101,27 @@ namespace ts {
assertParseResult(
`{
"compilerOptions": {
"lib": "es5"
"lib": ["es5"]
}
}`, {
config: { compilerOptions: { lib: "es5" } }
config: { compilerOptions: { lib: ["es5"] } }
});

assertParseResult(
`{
"compilerOptions": {
"lib": "es5,es6"
"lib": ["es5", "es6"]
}
}`, {
config: { compilerOptions: { lib: "es5,es6" } }
config: { compilerOptions: { lib: ["es5", "es6"] } }
});
});

it("returns error when tsconfig have excludes", () => {
assertParseErrorWithExcludesKeyword(
`{
"compilerOptions": {
"lib": "es5"
"lib": ["es5"]
},
"excludes": [
"foge.ts"
Expand Down