Merge pull request #21743 from Microsoft/defaultProjectForFile

Fix getDefaultProjectForFile check
This commit is contained in:
Sheetal Nandi 2018-02-08 09:58:43 -08:00 committed by GitHub
commit bf707ac265
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 53 additions and 20 deletions

View File

@ -2888,6 +2888,29 @@ namespace ts.projectSystem {
});
describe("tsserverProjectSystem Proper errors", () => {
function createErrorLogger() {
let hasError = false;
const errorLogger: server.Logger = {
close: noop,
hasLevel: () => true,
loggingEnabled: () => true,
perftrc: noop,
info: noop,
msg: (_s, type) => {
if (type === server.Msg.Err) {
hasError = true;
}
},
startGroup: noop,
endGroup: noop,
getLogFileName: (): string => undefined
};
return {
errorLogger,
hasError: () => hasError
};
}
it("document is not contained in project", () => {
const file1 = {
path: "/a/b/app.ts",
@ -2910,23 +2933,8 @@ namespace ts.projectSystem {
describe("when opening new file that doesnt exist on disk yet", () => {
function verifyNonExistentFile(useProjectRoot: boolean) {
const host = createServerHost([libFile]);
let hasError = false;
const errLogger: server.Logger = {
close: noop,
hasLevel: () => true,
loggingEnabled: () => true,
perftrc: noop,
info: noop,
msg: (_s, type) => {
if (type === server.Msg.Err) {
hasError = true;
}
},
startGroup: noop,
endGroup: noop,
getLogFileName: (): string => undefined
};
const session = createSession(host, { canUseEvents: true, logger: errLogger, useInferredProjectPerProjectRoot: true });
const { hasError, errorLogger } = createErrorLogger();
const session = createSession(host, { canUseEvents: true, logger: errorLogger, useInferredProjectPerProjectRoot: true });
const folderPath = "/user/someuser/projects/someFolder";
const projectService = session.getProjectService();
@ -2967,13 +2975,13 @@ namespace ts.projectSystem {
// Run the last one = get error request
host.runQueuedTimeoutCallbacks(newTimeoutId);
assert.isFalse(hasError);
assert.isFalse(hasError());
host.checkTimeoutQueueLength(2);
checkErrorMessage(session, "syntaxDiag", { file: untitledFile, diagnostics: [] });
session.clearMessages();
host.runQueuedImmediateCallbacks();
assert.isFalse(hasError);
assert.isFalse(hasError());
checkErrorMessage(session, "semanticDiag", { file: untitledFile, diagnostics: [] });
checkCompleteEvent(session, 2, expectedSequenceId);
@ -3039,6 +3047,31 @@ namespace ts.projectSystem {
session.clearMessages();
}
});
it("Getting errors before opening file", () => {
const file: FileOrFolder = {
path: "/a/b/project/file.ts",
content: "let x: number = false;"
};
const host = createServerHost([file, libFile]);
const { hasError, errorLogger } = createErrorLogger();
const session = createSession(host, { canUseEvents: true, logger: errorLogger });
session.clearMessages();
const expectedSequenceId = session.getNextSeq();
session.executeCommandSeq<protocol.GeterrRequest>({
command: server.CommandNames.Geterr,
arguments: {
delay: 0,
files: [file.path]
}
});
host.runQueuedImmediateCallbacks();
assert.isFalse(hasError());
checkCompleteEvent(session, 1, expectedSequenceId);
session.clearMessages();
});
});
describe("tsserverProjectSystem autoDiscovery", () => {

View File

@ -668,7 +668,7 @@ namespace ts.server {
getDefaultProjectForFile(fileName: NormalizedPath, ensureProject: boolean) {
let scriptInfo = this.getScriptInfoForNormalizedPath(fileName);
if (ensureProject && !scriptInfo || scriptInfo.isOrphan()) {
if (ensureProject && (!scriptInfo || scriptInfo.isOrphan())) {
this.ensureProjectStructuresUptoDate();
scriptInfo = this.getScriptInfoForNormalizedPath(fileName);
if (!scriptInfo) {