129 lines
3.1 KiB
Go
129 lines
3.1 KiB
Go
package project_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/microsoft/typescript-go/internal/bundled"
|
|
"github.com/microsoft/typescript-go/internal/lsp/lsproto"
|
|
"github.com/microsoft/typescript-go/internal/testutil/projecttestutil"
|
|
)
|
|
|
|
func TestProjectCollectionDefaultProject(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
if !bundled.Embedded {
|
|
t.Skip("bundled files are not embedded")
|
|
}
|
|
|
|
// Project 1 references project 2, which does not have open files.
|
|
// File project1/dist/index.d.ts does not belong to any tsconfig.json, but is included in programs for
|
|
// projects 3 and 4 via project 1's output.
|
|
// When looking for a default project for project1/dist/index.d.ts,
|
|
// we should not try to unconditionally access project 2,
|
|
// which isn't loaded because of `disableReferencedProjectLoad`.
|
|
files := map[string]any{
|
|
"/project1/tsconfig.json": `{
|
|
"extends": "../tsconfig.json",
|
|
"files": [],
|
|
"include": ["src/**/*"],
|
|
"references": [
|
|
{
|
|
"path": "../project2"
|
|
}
|
|
],
|
|
"compilerOptions": {
|
|
"composite": true,
|
|
"outDir": "./dist",
|
|
"rootDir": "./src",
|
|
}
|
|
}`,
|
|
"/project1/src/index.ts": `export const foo = 42;
|
|
export type Bar = { a: string };`,
|
|
"/project1/dist/index.d.ts": `export declare const foo = 42;
|
|
export type Bar = {
|
|
a: string;
|
|
};`,
|
|
"/project2/tsconfig.json": `{
|
|
"extends": "../tsconfig.json",
|
|
"files": [],
|
|
"include": ["src/**/*"],
|
|
"compilerOptions": {
|
|
"composite": true,
|
|
"outDir": "./dist",
|
|
"rootDir": "./src"
|
|
}
|
|
}`,
|
|
"/project3/tsconfig.json": `{
|
|
"extends": "../tsconfig.json",
|
|
"files": [],
|
|
"include": ["src/**/*"],
|
|
"references": [
|
|
{
|
|
"path": "../project1"
|
|
}
|
|
],
|
|
"compilerOptions": {
|
|
"composite": true,
|
|
"outDir": "./dist",
|
|
"rootDir": "./src",
|
|
}
|
|
}`,
|
|
"/project3/src/index.ts": `import { Bar } from "../../project1/dist/index.js";
|
|
declare const b: Bar;
|
|
const x: string = b.a;`,
|
|
"/project4/tsconfig.json": `{
|
|
"extends": "../tsconfig.json",
|
|
"files": [],
|
|
"include": ["src/**/*"],
|
|
"references": [
|
|
{
|
|
"path": "../project1"
|
|
}
|
|
],
|
|
"compilerOptions": {
|
|
"composite": true,
|
|
"outDir": "./dist",
|
|
"rootDir": "./src",
|
|
}
|
|
}`,
|
|
"/project4/src/index.ts": `import { Bar } from "../../project1/dist/index.js";
|
|
declare const b: Bar;
|
|
const x: string = b.a;`,
|
|
"/tsconfig.json": `{
|
|
"compilerOptions": {
|
|
"disableReferencedProjectLoad": true,
|
|
"disableSolutionSearching": true,
|
|
"disableSourceOfProjectReferenceRedirect": true
|
|
},
|
|
"files": [],
|
|
"references": [
|
|
{
|
|
"path": "./project1"
|
|
},
|
|
{
|
|
"path": "./project2"
|
|
},
|
|
{
|
|
"path": "./project3"
|
|
},
|
|
{
|
|
"path": "./project4"
|
|
}
|
|
]
|
|
}`,
|
|
}
|
|
uris := []lsproto.DocumentUri{
|
|
"file:///project1/dist/index.d.ts",
|
|
"file:///project1/src/index.ts",
|
|
"file:///project3/src/index.ts",
|
|
"file:///project4/src/index.ts",
|
|
}
|
|
session, _ := projecttestutil.Setup(files)
|
|
// Should not crash.
|
|
for _, uri := range uris {
|
|
content := files[string(uri)[7:]].(string)
|
|
session.DidOpenFile(context.Background(), uri, 1, content, lsproto.LanguageKindTypeScript)
|
|
}
|
|
}
|