Skip to content

Commit

Permalink
feat: use single registry for autocomplete (#286)
Browse files Browse the repository at this point in the history
* feat: use single registry for autocomplete

* align addon version
  • Loading branch information
lifeart committed May 26, 2021
1 parent dff1f4d commit 58e18a8
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 12 deletions.
4 changes: 4 additions & 0 deletions src/builtin-addons/core/script-completion-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ export default class ScriptCompletionProvider {
if (!this.meta.projectAddonsInfoInitialized) {
mGetProjectAddonsInfo(root);
this.enableRegistryCache('projectAddonsInfoInitialized');
this.project.invalidateRegistry();
}

const registry = this.registry;
Expand All @@ -108,6 +109,7 @@ export default class ScriptCompletionProvider {
if (!this.meta.projectAddonsInfoInitialized) {
mGetProjectAddonsInfo(root);
this.enableRegistryCache('projectAddonsInfoInitialized');
this.project.invalidateRegistry();
}

const registry = this.registry;
Expand All @@ -130,6 +132,7 @@ export default class ScriptCompletionProvider {
if (!this.meta.projectAddonsInfoInitialized) {
mGetProjectAddonsInfo(root);
this.enableRegistryCache('projectAddonsInfoInitialized');
this.project.invalidateRegistry();
}

const registry = this.registry;
Expand Down Expand Up @@ -184,6 +187,7 @@ export default class ScriptCompletionProvider {
if (!this.meta.projectAddonsInfoInitialized) {
mGetProjectAddonsInfo(root);
this.enableRegistryCache('projectAddonsInfoInitialized');
this.project.invalidateRegistry();
}

const registry = this.registry;
Expand Down
25 changes: 18 additions & 7 deletions src/builtin-addons/core/template-completion-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@ export function generateNamespacedComponentsHashMap(addonsMeta: Array<AddonMeta>

// Iterate over the addons meta
addonsMeta.forEach((addonData: AddonMeta) => {
if (addonData.version !== 1) {
return;
}

// Get the component registry based on the addon root.
// The component registry is a map where the file name is the key and the value are
// potential file paths.
Expand Down Expand Up @@ -174,6 +178,8 @@ export default class TemplateCompletionProvider {
mGetProjectAddonsInfo(project.root);
this.enableRegistryCache('projectAddonsInfoInitialized');

this.project.invalidateRegistry();

logInfo(project.root + ': registry initialized in ' + (Date.now() - initStartTime) + 'ms');
} catch (e) {
logError(e);
Expand All @@ -188,6 +194,7 @@ export default class TemplateCompletionProvider {
if (!this.meta.projectAddonsInfoInitialized) {
mGetProjectAddonsInfo(root);
this.enableRegistryCache('projectAddonsInfoInitialized');
this.project.invalidateRegistry();
}

if (!this.meta.componentsRegistryInitialized) {
Expand All @@ -200,7 +207,7 @@ export default class TemplateCompletionProvider {
this.enableRegistryCache('podComponentsRegistryInitialized');
}

const registry = this.server.getRegistry(this.project.roots);
const registry = this.project.registry;

return uniqBy(
items
Expand Down Expand Up @@ -244,6 +251,7 @@ export default class TemplateCompletionProvider {
if (!this.meta.projectAddonsInfoInitialized) {
mGetProjectAddonsInfo(root);
this.enableRegistryCache('projectAddonsInfoInitialized');
this.project.invalidateRegistry();
}

if (!this.meta.componentsRegistryInitialized) {
Expand All @@ -261,7 +269,7 @@ export default class TemplateCompletionProvider {
this.enableRegistryCache('helpersRegistryInitialized');
}

const registry = this.server.getRegistry(this.project.roots);
const registry = this.project.registry;

const candidates: CompletionItem[] = [
...Object.keys(registry.component).map((rawName) => {
Expand All @@ -286,6 +294,7 @@ export default class TemplateCompletionProvider {
if (!this.meta.projectAddonsInfoInitialized) {
mGetProjectAddonsInfo(root);
this.enableRegistryCache('projectAddonsInfoInitialized');
this.project.invalidateRegistry();
}

if (!this.meta.componentsRegistryInitialized) {
Expand All @@ -298,7 +307,7 @@ export default class TemplateCompletionProvider {
this.enableRegistryCache('podComponentsRegistryInitialized');
}

const registry = this.server.getRegistry(this.project.roots);
const registry = this.project.registry;

return Object.keys(registry.component).map((rawName) => {
return {
Expand All @@ -317,9 +326,10 @@ export default class TemplateCompletionProvider {
if (!this.meta.projectAddonsInfoInitialized) {
mGetProjectAddonsInfo(this.project.root);
this.enableRegistryCache('projectAddonsInfoInitialized');
this.project.invalidateRegistry();
}

const registry = this.server.getRegistry(this.project.roots);
const registry = this.project.registry;

return Object.keys(registry.helper).map((helperName) => {
return {
Expand Down Expand Up @@ -518,7 +528,7 @@ export default class TemplateCompletionProvider {
this.enableRegistryCache('routesRegistryInitialized');
}

const registry = this.server.getRegistry(this.project.roots);
const registry = this.project.registry;

const results = Object.keys(registry.routePath).map((name) => {
return {
Expand All @@ -538,7 +548,7 @@ export default class TemplateCompletionProvider {
this.enableRegistryCache('routesRegistryInitialized');
}

const registry = this.server.getRegistry(this.project.roots);
const registry = this.project.registry;

const results = Object.keys(registry.routePath).map((name) => {
return {
Expand All @@ -560,9 +570,10 @@ export default class TemplateCompletionProvider {
if (!this.meta.projectAddonsInfoInitialized) {
mGetProjectAddonsInfo(root);
this.enableRegistryCache('projectAddonsInfoInitialized');
this.project.invalidateRegistry();
}

const registry = this.server.getRegistry(this.project.roots);
const registry = this.project.registry;

const resolvedModifiers = Object.keys(registry.modifier).map((name) => {
return {
Expand Down
3 changes: 3 additions & 0 deletions src/project.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ export class Project extends BaseProject {
private registryVersion = 0;
private _registry!: IRegistry;
private _registryVersion = -1;
invalidateRegistry() {
this._registryVersion = -1;
}
get registry(): IRegistry {
if (this._registryVersion !== this.registryVersion) {
logInfo(`${this.name} registry version mismatch [${this._registryVersion}, ${this.registryVersion}], regenerating...`);
Expand Down
5 changes: 4 additions & 1 deletion src/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ import { MatchResultType } from './utils/path-matcher';
import { FileChangeType } from 'vscode-languageserver/node';
import { debounce } from 'lodash';
import { Config, Initializer } from './types';
import { isFileBelongsToRoots } from './utils/layout-helpers';
import { isFileBelongsToRoots, mGetProjectAddonsInfo } from './utils/layout-helpers';

export default class Server {
initializers: Initializer[] = [];
Expand Down Expand Up @@ -157,6 +157,9 @@ export default class Server {
};
}

mGetProjectAddonsInfo(project.root);
project.invalidateRegistry();

return {
projectName: project.name,
root: project.root,
Expand Down
8 changes: 4 additions & 4 deletions test/bultin-addons/core/template-complation-provider-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ describe('filter util', function () {
describe('generateNamespacedComponentsHashMap', function () {
it('[Angle brackets] returns the expected namespaced map', function () {
const mockAddonMetaArr = [
{ name: '@company/foo', root: 'blah/bar/dummy/@company/foo' },
{ name: 'biz', root: 'blah/baz/diz/biz' },
{ name: '@company/foo', version: 1, root: 'blah/bar/dummy/@company/foo' },
{ name: 'biz', version: 1, root: 'blah/baz/diz/biz' },
];

const server: any = {
Expand All @@ -38,8 +38,8 @@ describe('generateNamespacedComponentsHashMap', function () {

it('[Mustache] returns the expected namespaced map', function () {
const mockAddonMetaArr = [
{ name: '@company/test', root: 'blah/bar/dummy/@company/test' },
{ name: 'biz', root: 'blah/baz/diz/biz' },
{ name: '@company/test', version: 1, root: 'blah/bar/dummy/@company/test' },
{ name: 'biz', version: 1, root: 'blah/baz/diz/biz' },
];

const server: any = {
Expand Down

0 comments on commit 58e18a8

Please sign in to comment.