Skip to content

Commit b18f830

Browse files
committed
Fix getDefaultProjectForFile check
Fixes microsoft#21738
1 parent ed941c2 commit b18f830

2 files changed

Lines changed: 53 additions & 20 deletions

File tree

src/harness/unittests/tsserverProjectSystem.ts

Lines changed: 52 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2888,6 +2888,29 @@ namespace ts.projectSystem {
28882888
});
28892889

28902890
describe("tsserverProjectSystem Proper errors", () => {
2891+
function createErrorLogger() {
2892+
let hasError = false;
2893+
const errorLogger: server.Logger = {
2894+
close: noop,
2895+
hasLevel: () => true,
2896+
loggingEnabled: () => true,
2897+
perftrc: noop,
2898+
info: noop,
2899+
msg: (_s, type) => {
2900+
if (type === server.Msg.Err) {
2901+
hasError = true;
2902+
}
2903+
},
2904+
startGroup: noop,
2905+
endGroup: noop,
2906+
getLogFileName: (): string => undefined
2907+
};
2908+
return {
2909+
errorLogger,
2910+
hasError: () => hasError
2911+
};
2912+
}
2913+
28912914
it("document is not contained in project", () => {
28922915
const file1 = {
28932916
path: "/a/b/app.ts",
@@ -2910,23 +2933,8 @@ namespace ts.projectSystem {
29102933
describe("when opening new file that doesnt exist on disk yet", () => {
29112934
function verifyNonExistentFile(useProjectRoot: boolean) {
29122935
const host = createServerHost([libFile]);
2913-
let hasError = false;
2914-
const errLogger: server.Logger = {
2915-
close: noop,
2916-
hasLevel: () => true,
2917-
loggingEnabled: () => true,
2918-
perftrc: noop,
2919-
info: noop,
2920-
msg: (_s, type) => {
2921-
if (type === server.Msg.Err) {
2922-
hasError = true;
2923-
}
2924-
},
2925-
startGroup: noop,
2926-
endGroup: noop,
2927-
getLogFileName: (): string => undefined
2928-
};
2929-
const session = createSession(host, { canUseEvents: true, logger: errLogger, useInferredProjectPerProjectRoot: true });
2936+
const { hasError, errorLogger } = createErrorLogger();
2937+
const session = createSession(host, { canUseEvents: true, logger: errorLogger, useInferredProjectPerProjectRoot: true });
29302938

29312939
const folderPath = "/user/someuser/projects/someFolder";
29322940
const projectService = session.getProjectService();
@@ -2967,13 +2975,13 @@ namespace ts.projectSystem {
29672975
// Run the last one = get error request
29682976
host.runQueuedTimeoutCallbacks(newTimeoutId);
29692977

2970-
assert.isFalse(hasError);
2978+
assert.isFalse(hasError());
29712979
host.checkTimeoutQueueLength(2);
29722980
checkErrorMessage(session, "syntaxDiag", { file: untitledFile, diagnostics: [] });
29732981
session.clearMessages();
29742982

29752983
host.runQueuedImmediateCallbacks();
2976-
assert.isFalse(hasError);
2984+
assert.isFalse(hasError());
29772985
checkErrorMessage(session, "semanticDiag", { file: untitledFile, diagnostics: [] });
29782986

29792987
checkCompleteEvent(session, 2, expectedSequenceId);
@@ -3039,6 +3047,31 @@ namespace ts.projectSystem {
30393047
session.clearMessages();
30403048
}
30413049
});
3050+
3051+
it("Getting errors before opening file", () => {
3052+
const file: FileOrFolder = {
3053+
path: "/a/b/project/file.ts",
3054+
content: "let x: number = false;"
3055+
};
3056+
const host = createServerHost([file, libFile]);
3057+
const { hasError, errorLogger } = createErrorLogger();
3058+
const session = createSession(host, { canUseEvents: true, logger: errorLogger });
3059+
3060+
session.clearMessages();
3061+
const expectedSequenceId = session.getNextSeq();
3062+
session.executeCommandSeq<protocol.GeterrRequest>({
3063+
command: server.CommandNames.Geterr,
3064+
arguments: {
3065+
delay: 0,
3066+
files: [file.path]
3067+
}
3068+
});
3069+
3070+
host.runQueuedImmediateCallbacks();
3071+
assert.isFalse(hasError());
3072+
checkCompleteEvent(session, 1, expectedSequenceId);
3073+
session.clearMessages();
3074+
});
30423075
});
30433076

30443077
describe("tsserverProjectSystem autoDiscovery", () => {

src/server/editorServices.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,7 @@ namespace ts.server {
668668

669669
getDefaultProjectForFile(fileName: NormalizedPath, ensureProject: boolean) {
670670
let scriptInfo = this.getScriptInfoForNormalizedPath(fileName);
671-
if (ensureProject && !scriptInfo || scriptInfo.isOrphan()) {
671+
if (ensureProject && (!scriptInfo || scriptInfo.isOrphan())) {
672672
this.ensureProjectStructuresUptoDate();
673673
scriptInfo = this.getScriptInfoForNormalizedPath(fileName);
674674
if (!scriptInfo) {

0 commit comments

Comments
 (0)