Skip to content

Commit f0b984e

Browse files
committed
+
1 parent 10685e0 commit f0b984e

File tree

11 files changed

+67
-34
lines changed

11 files changed

+67
-34
lines changed

src/builtin-addons/core/script-completion-provider.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ export default class ScriptCompletionProvider {
8484
}
8585

8686
if (!this.meta.projectAddonsInfoInitialized) {
87-
await mGetProjectAddonsInfo(root, this.project.seenDependencies);
87+
await mGetProjectAddonsInfo(root, this.project.seenProjectDependencies);
8888
this.enableRegistryCache('projectAddonsInfoInitialized');
8989
this.project.invalidateRegistry();
9090
}
@@ -107,7 +107,7 @@ export default class ScriptCompletionProvider {
107107
}
108108

109109
if (!this.meta.projectAddonsInfoInitialized) {
110-
await mGetProjectAddonsInfo(root, this.project.seenDependencies);
110+
await mGetProjectAddonsInfo(root, this.project.seenProjectDependencies);
111111
this.enableRegistryCache('projectAddonsInfoInitialized');
112112
this.project.invalidateRegistry();
113113
}
@@ -130,7 +130,7 @@ export default class ScriptCompletionProvider {
130130
}
131131

132132
if (!this.meta.projectAddonsInfoInitialized) {
133-
await mGetProjectAddonsInfo(root, this.project.seenDependencies);
133+
await mGetProjectAddonsInfo(root, this.project.seenProjectDependencies);
134134
this.enableRegistryCache('projectAddonsInfoInitialized');
135135
this.project.invalidateRegistry();
136136
}
@@ -185,7 +185,7 @@ export default class ScriptCompletionProvider {
185185
}
186186

187187
if (!this.meta.projectAddonsInfoInitialized) {
188-
await mGetProjectAddonsInfo(root, this.project.seenDependencies);
188+
await mGetProjectAddonsInfo(root, this.project.seenProjectDependencies);
189189
this.enableRegistryCache('projectAddonsInfoInitialized');
190190
this.project.invalidateRegistry();
191191
}

src/builtin-addons/core/template-completion-provider.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ export default class TemplateCompletionProvider {
178178
await mListComponents(project);
179179
this.enableRegistryCache('componentsRegistryInitialized');
180180

181-
await mGetProjectAddonsInfo(project.root, project.seenDependencies);
181+
await mGetProjectAddonsInfo(project.root, project.seenProjectDependencies);
182182
this.enableRegistryCache('projectAddonsInfoInitialized');
183183

184184
this.project.invalidateRegistry();
@@ -195,7 +195,7 @@ export default class TemplateCompletionProvider {
195195
const items: CompletionItem[] = [];
196196

197197
if (!this.meta.projectAddonsInfoInitialized) {
198-
await mGetProjectAddonsInfo(root, this.project.seenDependencies);
198+
await mGetProjectAddonsInfo(root, this.project.seenProjectDependencies);
199199
this.enableRegistryCache('projectAddonsInfoInitialized');
200200
this.project.invalidateRegistry();
201201
}
@@ -256,7 +256,7 @@ export default class TemplateCompletionProvider {
256256
}
257257
async getMustachePathCandidates(root: string) {
258258
if (!this.meta.projectAddonsInfoInitialized) {
259-
await mGetProjectAddonsInfo(root, this.project.seenDependencies);
259+
await mGetProjectAddonsInfo(root, this.project.seenProjectDependencies);
260260
this.enableRegistryCache('projectAddonsInfoInitialized');
261261
this.project.invalidateRegistry();
262262
}
@@ -305,7 +305,7 @@ export default class TemplateCompletionProvider {
305305
}
306306
async getBlockPathCandidates(root: string): Promise<CompletionItem[]> {
307307
if (!this.meta.projectAddonsInfoInitialized) {
308-
await mGetProjectAddonsInfo(root, this.project.seenDependencies);
308+
await mGetProjectAddonsInfo(root, this.project.seenProjectDependencies);
309309
this.enableRegistryCache('projectAddonsInfoInitialized');
310310
this.project.invalidateRegistry();
311311
}
@@ -340,7 +340,7 @@ export default class TemplateCompletionProvider {
340340
}
341341

342342
if (!this.meta.projectAddonsInfoInitialized) {
343-
await mGetProjectAddonsInfo(this.project.root, this.project.seenDependencies);
343+
await mGetProjectAddonsInfo(this.project.root, this.project.seenProjectDependencies);
344344
this.enableRegistryCache('projectAddonsInfoInitialized');
345345
this.project.invalidateRegistry();
346346
}
@@ -447,7 +447,7 @@ export default class TemplateCompletionProvider {
447447
}
448448

449449
if (!this.meta.projectAddonsInfoInitialized) {
450-
await mGetProjectAddonsInfo(root, this.project.seenDependencies);
450+
await mGetProjectAddonsInfo(root, this.project.seenProjectDependencies);
451451
this.enableRegistryCache('projectAddonsInfoInitialized');
452452
this.project.invalidateRegistry();
453453
}

src/project.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ export interface Executors {
3737
export class Project extends BaseProject {
3838
// Don't traverse dependencies we've already seen.
3939
// correct package graph can sort of throw us in to cycles if we don't keep track of this.
40-
seenDependencies = new Set<string>();
40+
seenInRepoDependencies: Set<string> = new Set();
41+
seenProjectDependencies: Set<string> = new Set();
4142

4243
providers!: ProjectProviders;
4344
builtinProviders!: ProjectProviders;
@@ -152,7 +153,7 @@ export class Project extends BaseProject {
152153
this.providers = emptyProjectProviders();
153154
this.flags.enableEagerRegistryInitialization = false;
154155
} else if (server.options.type === 'node') {
155-
this.providers = await collectProjectProviders(this.root, this.addons, this.seenDependencies);
156+
this.providers = await collectProjectProviders(this.root, this.addons, this.seenInRepoDependencies, this.seenProjectDependencies);
156157
} else {
157158
throw new Error(`Unknown server type: "${server.options.type}"`);
158159
}

src/server.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ export default class Server {
218218
};
219219
}
220220

221-
await mGetProjectAddonsInfo(project.root, project.seenDependencies);
221+
await mGetProjectAddonsInfo(project.root, project.seenProjectDependencies);
222222
project.invalidateRegistry();
223223

224224
return {

src/utils/addon-api.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,13 +187,18 @@ function requireUncached(module: string) {
187187
return result;
188188
}
189189

190-
export async function collectProjectProviders(root: string, addons: string[], seenDependencies: Set<string>): Promise<ProjectProviders> {
190+
export async function collectProjectProviders(
191+
root: string,
192+
addons: string[],
193+
seenInRepoDependencies: Set<string>,
194+
seenProjectDependencies: Set<string>
195+
): Promise<ProjectProviders> {
191196
const time = instrumentTime(`collectProjectProviders(${root})`);
192197

193198
time.log(`Starting`);
194199
const [projectAddonsRoots, projectInRepoAddonsRoots] = await Promise.all([
195-
getProjectAddonsRoots(root, seenDependencies),
196-
getProjectInRepoAddonsRoots(root, seenDependencies),
200+
getProjectAddonsRoots(root, seenProjectDependencies),
201+
getProjectInRepoAddonsRoots(root, seenInRepoDependencies),
197202
]);
198203

199204
time.log(`found roots`);

src/utils/definition-helpers.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ export function getPathsForComponentTemplates(root: string, maybeComponentName:
168168
}
169169

170170
export async function getAddonImport(project: Project, importPath: string) {
171-
const { root, seenDependencies } = project;
171+
const { root, seenProjectDependencies, seenInRepoDependencies } = project;
172172
const importParts = importPath.split('/');
173173
let addonName = importParts.shift();
174174

@@ -181,7 +181,10 @@ export async function getAddonImport(project: Project, importPath: string) {
181181
}
182182

183183
const items: string[] = [];
184-
const [addonRoots, inRepoRoots] = await Promise.all([mProjectAddonsRoots(root, seenDependencies), mProjectInRepoAddonsRoots(root, seenDependencies)]);
184+
const [addonRoots, inRepoRoots] = await Promise.all([
185+
mProjectAddonsRoots(root, seenProjectDependencies),
186+
mProjectInRepoAddonsRoots(root, seenInRepoDependencies),
187+
]);
185188

186189
const roots = items.concat(addonRoots, inRepoRoots);
187190
let existingPaths: string[] = [];
@@ -231,9 +234,12 @@ export async function getAddonImport(project: Project, importPath: string) {
231234
}
232235

233236
export async function getAddonPathsForType(project: Project, collection: 'services' | 'models' | 'modifiers' | 'helpers' | 'routes', name: string) {
234-
const { root, seenDependencies } = project;
237+
const { root, seenInRepoDependencies, seenProjectDependencies } = project;
235238
const items: string[] = [];
236-
const [addonRoots, inRepoRoots] = await Promise.all([mProjectAddonsRoots(root, seenDependencies), mProjectInRepoAddonsRoots(root, seenDependencies)]);
239+
const [addonRoots, inRepoRoots] = await Promise.all([
240+
mProjectAddonsRoots(root, seenProjectDependencies),
241+
mProjectInRepoAddonsRoots(root, seenInRepoDependencies),
242+
]);
237243
const roots = items.concat(addonRoots, inRepoRoots);
238244
let existingPaths: string[] = [];
239245
let hasValidPath = false;

src/utils/layout-helpers.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { clean, coerce, valid } from 'semver';
66
import { BaseProject } from '../base-project';
77
import { fsProvider } from '../fs-provider';
88
import walkAsync from './walk-async';
9-
import { instrumentTime } from './logger';
9+
import { instrumentTime, logDebugInfo } from './logger';
1010

1111
// const GLOBAL_REGISTRY = ['primitive-name'][['relatedFiles']];
1212

@@ -253,7 +253,7 @@ async function getRecursiveInRepoAddonRoots(root: string, seenDependencies: Set<
253253
return recursiveRoots.sort();
254254
}
255255

256-
export async function getProjectInRepoAddonsRoots(root: string, seenDependencies: Set<string>): Promise<string[]> {
256+
export async function getProjectInRepoAddonsRoots(root: string, seenDependencies: Set<string> = new Set()): Promise<string[]> {
257257
const time = instrumentTime(`getProjectInRepoAddonsRoots(${root})`);
258258

259259
const roots: string[] = await getRecursiveInRepoAddonRoots(root, seenDependencies, []);
@@ -302,7 +302,11 @@ export async function getProjectAddonsRoots(root: string, seenDependencies: Set<
302302

303303
const pack = await asyncGetPackageJSON(root);
304304

305-
if (!pack.name) return [];
305+
if (!pack.name) {
306+
logDebugInfo('no name', root, JSON.stringify(pack), Array.from(seenDependencies), resolvedItems);
307+
308+
return [];
309+
}
306310

307311
if (seenDependencies.has(pack.name)) return [];
308312

src/utils/logger.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@ import { resolve } from 'path';
44
import { RemoteConsole } from 'vscode-languageserver/node';
55
import { fsProvider } from '../fs-provider';
66

7-
function getEnv() {
8-
if (typeof process !== undefined) {
9-
return process.env;
10-
} else {
11-
return {};
12-
}
13-
}
7+
// function getEnv() {
8+
// if (typeof process !== undefined) {
9+
// return process.env;
10+
// } else {
11+
// return {};
12+
// }
13+
// }
1414

1515
// Log debugging to the ELS package root, if possible
1616
// eslint-disable-next-line no-extra-boolean-cast
17-
const debug = !!getEnv().CI ? true : getEnv().ELS_DEBUG || false;
17+
const debug = true;
1818
const log_file = debug ? fsProvider().createWriteStream(resolve(__dirname, `../../debug.${process.pid}.log`), { flags: 'w' }) : null;
1919

2020
let remoteConsole: RemoteConsole | null = null;

test/integration-test.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ describe('integration', function () {
208208
},
209209
},
210210
'package.json': JSON.stringify({
211+
name: 'some-project',
211212
'ember-addon': {
212213
paths: ['lib/biz'],
213214
},
@@ -263,6 +264,7 @@ describe('integration', function () {
263264
},
264265
},
265266
'package.json': JSON.stringify({
267+
name: 'some-different-project',
266268
'ember-addon': {
267269
paths: ['lib/biz'],
268270
},
@@ -1006,6 +1008,7 @@ describe('integration', function () {
10061008
connection,
10071009
{
10081010
'package.json': JSON.stringify({
1011+
name: 'default-name',
10091012
'ember-language-server': {
10101013
entry: './lib/langserver',
10111014
capabilities: {
@@ -1056,6 +1059,7 @@ describe('integration', function () {
10561059
},
10571060
},
10581061
'package.json': JSON.stringify({
1062+
name: 't1',
10591063
dependencies: {
10601064
provider: '*',
10611065
},
@@ -1097,7 +1101,9 @@ describe('integration', function () {
10971101
},
10981102
},
10991103
'package.json': JSON.stringify({
1104+
name: 'fake',
11001105
dependencies: {
1106+
name: 'lake',
11011107
provider: '*',
11021108
},
11031109
}),
@@ -1322,7 +1328,9 @@ describe('integration', function () {
13221328
},
13231329
},
13241330
'package.json': JSON.stringify({
1331+
name: 'pork',
13251332
dependencies: {
1333+
name: 'park',
13261334
provider: '*',
13271335
},
13281336
}),
@@ -1396,7 +1404,9 @@ describe('integration', function () {
13961404
},
13971405
},
13981406
'package.json': JSON.stringify({
1407+
name: 'white',
13991408
dependencies: {
1409+
name: 'dark',
14001410
provider: '*',
14011411
},
14021412
}),
@@ -1456,6 +1466,7 @@ describe('integration', function () {
14561466
},
14571467
},
14581468
'package.json': JSON.stringify({
1469+
name: 'shark',
14591470
dependencies: {
14601471
provider: '*',
14611472
},
@@ -1514,6 +1525,7 @@ describe('integration', function () {
15141525
},
15151526
},
15161527
'package.json': JSON.stringify({
1528+
name: 'pork',
15171529
dependencies: {
15181530
provider: '*',
15191531
},
@@ -1562,6 +1574,7 @@ describe('integration', function () {
15621574
},
15631575
},
15641576
'package.json': JSON.stringify({
1577+
name: 'dog',
15651578
dependencies: {
15661579
provider: '*',
15671580
},
@@ -1609,6 +1622,7 @@ describe('integration', function () {
16091622
},
16101623
},
16111624
'package.json': JSON.stringify({
1625+
name: 'cat',
16121626
dependencies: {
16131627
provider: '*',
16141628
},
@@ -1692,6 +1706,7 @@ describe('integration', function () {
16921706
},
16931707
},
16941708
'package.json': JSON.stringify({
1709+
name: 'zoo',
16951710
dependencies: { 'ember-holy-futuristic-template-namespacing-batman': '^1.0.2' },
16961711
'ember-addon': {
16971712
paths: ['lib/biz'],
@@ -1730,6 +1745,7 @@ describe('integration', function () {
17301745
},
17311746
},
17321747
'package.json': JSON.stringify({
1748+
name: 'boss',
17331749
dependencies: { 'ember-holy-futuristic-template-namespacing-batman': '^1.0.2' },
17341750
}),
17351751
},

test/test_helpers/integration-helpers.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,7 @@ export function makeProject(appFiles = {}, addons = {}) {
708708
const fileStructure = Object.assign({}, appFiles, {
709709
node_modules,
710710
'package.json': JSON.stringify({
711+
name: 'mock-project',
711712
dependencies,
712713
}),
713714
});

test/utils/layout-helpers-test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ describe('definition-helpers', function () {
130130
describe('getProjectInRepoAddonsRoots()', function () {
131131
it('must discover in-repo addons for classic structure', async function () {
132132
const root = path.join(__dirname, './../fixtures/project-with-in-repo-addons');
133-
const items = await getProjectInRepoAddonsRoots(root);
133+
const items = await getProjectInRepoAddonsRoots(root, new Set());
134134

135135
expect(items.length).toEqual(2);
136136
});
@@ -139,7 +139,7 @@ describe('definition-helpers', function () {
139139
describe('getProjectAddonsRoots()', function () {
140140
it('must resolve all related to project addons', async function () {
141141
const root = path.join(__dirname, './../fixtures/full-project');
142-
const items = await getProjectAddonsRoots(root, [], 'hope_modules');
142+
const items = await getProjectAddonsRoots(root, new Set(), [], 'hope_modules');
143143

144144
expect(items.length).toEqual(2);
145145
});
@@ -174,7 +174,7 @@ describe('definition-helpers', function () {
174174
},
175175
});
176176

177-
const items = await getProjectAddonsRoots(path.join(info.path, 'packages', 'touchstone'));
177+
const items = await getProjectAddonsRoots(path.join(info.path, 'packages', 'touchstone'), new Set());
178178

179179
expect(items.length).toEqual(1);
180180
expect(items[0].split(path.sep).join('/').split('node_modules/')[1]).toEqual('@skylight/anvil');

0 commit comments

Comments
 (0)