@ember-tooling/ember-language-server
Advanced tools
Comparing version
@@ -0,1 +1,14 @@ | ||
## [2.30.4](https://github.com/ember-tooling/ember-language-server/compare/v2.30.3...v2.30.4) (2024-11-07) | ||
### Bug Fixes | ||
* performance regression for projects using correct module graphs ([10c6b28](https://github.com/ember-tooling/ember-language-server/commit/10c6b28d0b3e0dc1e087c97fb7f7f9aa9350b8bc)) | ||
### Reverts | ||
* Revert "Fix #414" ([bca0a71](https://github.com/ember-tooling/ember-language-server/commit/bca0a7108f3f125061b3968ab58a1d99895d13f4)), closes [#414](https://github.com/ember-tooling/ember-language-server/issues/414) | ||
* Revert "Does CI match my local env?" (it does) ([10685e0](https://github.com/ember-tooling/ember-language-server/commit/10685e09bf3999e4990a7b79a9ee18d821cb40a0)) | ||
## [2.30.3](https://github.com/ember-tooling/ember-language-server/compare/v2.30.2...v2.30.3) (2024-05-15) | ||
@@ -2,0 +15,0 @@ |
@@ -68,3 +68,3 @@ "use strict"; | ||
if (!this.meta.projectAddonsInfoInitialized) { | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(root); | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(root, this.project.dependencyMap); | ||
this.enableRegistryCache('projectAddonsInfoInitialized'); | ||
@@ -89,3 +89,3 @@ this.project.invalidateRegistry(); | ||
if (!this.meta.projectAddonsInfoInitialized) { | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(root); | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(root, this.project.dependencyMap); | ||
this.enableRegistryCache('projectAddonsInfoInitialized'); | ||
@@ -110,3 +110,3 @@ this.project.invalidateRegistry(); | ||
if (!this.meta.projectAddonsInfoInitialized) { | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(root); | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(root, this.project.dependencyMap); | ||
this.enableRegistryCache('projectAddonsInfoInitialized'); | ||
@@ -158,3 +158,3 @@ this.project.invalidateRegistry(); | ||
if (!this.meta.projectAddonsInfoInitialized) { | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(root); | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(root, this.project.dependencyMap); | ||
this.enableRegistryCache('projectAddonsInfoInitialized'); | ||
@@ -161,0 +161,0 @@ this.project.invalidateRegistry(); |
@@ -45,7 +45,7 @@ "use strict"; | ||
} | ||
async addonServicePaths(root, serviceName) { | ||
return await (0, definition_helpers_1.getAddonPathsForType)(root, 'services', serviceName); | ||
async addonServicePaths(project, serviceName) { | ||
return await (0, definition_helpers_1.getAddonPathsForType)(project, 'services', serviceName); | ||
} | ||
async addonImportPaths(root, pathName) { | ||
return await (0, definition_helpers_1.getAddonImport)(root, pathName); | ||
async addonImportPaths(project, pathName) { | ||
return await (0, definition_helpers_1.getAddonImport)(project, pathName); | ||
} | ||
@@ -88,3 +88,3 @@ classicImportPaths(root, pathName) { | ||
}); | ||
const addonImports = await this.resolvers.addonImportPaths(root, importPath); | ||
const addonImports = await this.resolvers.addonImportPaths(this.project, importPath); | ||
addonImports.forEach((pathLocation) => { | ||
@@ -108,3 +108,3 @@ guessedPaths.push(pathLocation); | ||
if (fnName === 'Service') { | ||
const paths = await this.resolvers.addonServicePaths(root, typeName); | ||
const paths = await this.resolvers.addonServicePaths(this.project, typeName); | ||
paths.forEach((item) => { | ||
@@ -111,0 +111,0 @@ guessedPaths.push(item); |
@@ -118,3 +118,3 @@ "use strict"; | ||
this.enableRegistryCache('componentsRegistryInitialized'); | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(project.root); | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(project.root, project.dependencyMap); | ||
this.enableRegistryCache('projectAddonsInfoInitialized'); | ||
@@ -135,3 +135,3 @@ this.project.invalidateRegistry(); | ||
if (!this.meta.projectAddonsInfoInitialized) { | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(root); | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(root, this.project.dependencyMap); | ||
this.enableRegistryCache('projectAddonsInfoInitialized'); | ||
@@ -184,3 +184,3 @@ this.project.invalidateRegistry(); | ||
if (!this.meta.projectAddonsInfoInitialized) { | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(root); | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(root, this.project.dependencyMap); | ||
this.enableRegistryCache('projectAddonsInfoInitialized'); | ||
@@ -228,3 +228,3 @@ this.project.invalidateRegistry(); | ||
if (!this.meta.projectAddonsInfoInitialized) { | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(root); | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(root, this.project.dependencyMap); | ||
this.enableRegistryCache('projectAddonsInfoInitialized'); | ||
@@ -259,3 +259,3 @@ this.project.invalidateRegistry(); | ||
if (!this.meta.projectAddonsInfoInitialized) { | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(this.project.root); | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(this.project.root, this.project.dependencyMap); | ||
this.enableRegistryCache('projectAddonsInfoInitialized'); | ||
@@ -349,3 +349,3 @@ this.project.invalidateRegistry(); | ||
if (!this.meta.projectAddonsInfoInitialized) { | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(root); | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(root, this.project.dependencyMap); | ||
this.enableRegistryCache('projectAddonsInfoInitialized'); | ||
@@ -352,0 +352,0 @@ this.project.invalidateRegistry(); |
@@ -68,2 +68,4 @@ 'use strict'; | ||
}); | ||
(0, logger_1.logInfo)(`ELS: Found ${roots.length} roots for ${workspaceRoot}`); | ||
const start = Date.now(); | ||
for (const rootPath of roots) { | ||
@@ -86,2 +88,3 @@ const filePath = path.join(workspaceRoot, rootPath); | ||
} | ||
(0, logger_1.logInfo)(`ELS: iterating roots took ${Date.now() - start}ms`); | ||
} | ||
@@ -100,2 +103,3 @@ async initialize(workspaceRoot) { | ||
const project = this.projects.get(projectPath); | ||
(0, logger_1.logInfo)(`Project already existed at ${projectPath}`); | ||
return { | ||
@@ -128,6 +132,8 @@ initIssues: project.initIssues, | ||
} | ||
(0, logger_1.logInfo)(`Initializing new project at ${projectPath} with ${this.localAddons.length} ELS addons.`); | ||
const project = new project_1.Project(projectPath, this.localAddons, info); | ||
const start = Date.now(); | ||
await project.initialize(this.server); | ||
this.projects.set(projectPath, project); | ||
(0, logger_1.logInfo)(`Ember CLI project added at ${projectPath}`); | ||
(0, logger_1.logInfo)(`Ember CLI project added at ${projectPath}. (took ${Date.now() - start}ms)`); | ||
await project.init(this.server); | ||
@@ -134,0 +140,0 @@ return { |
@@ -22,2 +22,5 @@ "use strict"; | ||
this.root = root; | ||
// Don't traverse dependencies we've already seen. | ||
// correct package graph can sort of throw us in to cycles if we don't keep track of this. | ||
this.dependencyMap = new Map(); | ||
this.addonsMeta = []; | ||
@@ -136,3 +139,3 @@ this.dependenciesMeta = []; | ||
else if (server.options.type === 'node') { | ||
this.providers = await (0, addon_api_1.collectProjectProviders)(this.root, this.addons); | ||
this.providers = await (0, addon_api_1.collectProjectProviders)(this.root, this.addons, this.dependencyMap); | ||
} | ||
@@ -139,0 +142,0 @@ else { |
@@ -143,6 +143,8 @@ /* -------------------------------------------------------------------------------------------- | ||
async executeInitializers() { | ||
(0, logger_1.logInfo)('UELS: executeInitializers'); | ||
(0, logger_1.logInfo)('ELS: executeInitializers'); | ||
(0, logger_1.logInfo)(`ELS: ${this.initializers.length} initializers`); | ||
for (const initializer of this.initializers) { | ||
await initializer(); | ||
} | ||
(0, logger_1.logInfo)(`ELS: clearing initializers because they've been initialized`); | ||
this.initializers = []; | ||
@@ -185,3 +187,3 @@ } | ||
} | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(project.root); | ||
await (0, layout_helpers_1.mGetProjectAddonsInfo)(project.root, project.dependencyMap); | ||
project.invalidateRegistry(); | ||
@@ -391,3 +393,5 @@ return { | ||
this.initializers.push(async () => { | ||
var _a; | ||
await this.projectRoots.initialize(rootPath); | ||
(0, logger_1.logInfo)(`Found ${(_a = workspaceFolders === null || workspaceFolders === void 0 ? void 0 : workspaceFolders.length) !== null && _a !== void 0 ? _a : 0} workspace folders for ${rootPath}`); | ||
if (workspaceFolders && Array.isArray(workspaceFolders)) { | ||
@@ -394,0 +398,0 @@ for (const folder of workspaceFolders) { |
@@ -47,3 +47,3 @@ import { Location, TextDocumentIdentifier, Command, CodeActionParams, CodeAction, Position, CompletionItem, Hover } from 'vscode-languageserver/node'; | ||
export declare function isConstructor(obj: any): boolean; | ||
export declare function collectProjectProviders(root: string, addons: string[]): Promise<ProjectProviders>; | ||
export declare function collectProjectProviders(root: string, addons: string[], dependencyMap: Project['dependencyMap']): Promise<ProjectProviders>; | ||
export declare type AddonMeta = { | ||
@@ -50,0 +50,0 @@ root: string; |
@@ -100,4 +100,10 @@ "use strict"; | ||
} | ||
async function collectProjectProviders(root, addons) { | ||
const [projectAddonsRoots, projectInRepoAddonsRoots] = await Promise.all([(0, layout_helpers_1.getProjectAddonsRoots)(root), (0, layout_helpers_1.getProjectInRepoAddonsRoots)(root)]); | ||
async function collectProjectProviders(root, addons, dependencyMap) { | ||
const time = (0, logger_1.instrumentTime)(`collectProjectProviders(${root})`); | ||
time.log(`Starting`); | ||
const [projectAddonsRoots, projectInRepoAddonsRoots] = await Promise.all([ | ||
(0, layout_helpers_1.getProjectAddonsRoots)(root, dependencyMap), | ||
(0, layout_helpers_1.getProjectInRepoAddonsRoots)(root, dependencyMap), | ||
]); | ||
time.log(`found roots`); | ||
const roots = addons | ||
@@ -134,2 +140,3 @@ .concat([root]) | ||
} | ||
time.log(`found ELS addons`); | ||
const result = emptyProjectProviders({ | ||
@@ -224,2 +231,3 @@ addonsMeta, | ||
}); | ||
time.log(`finished crawling dagMap`); | ||
return result; | ||
@@ -226,0 +234,0 @@ } |
import { Location } from 'vscode-languageserver/node'; | ||
import { Project } from '..'; | ||
export declare function pathsToLocations(...paths: string[]): Location[]; | ||
@@ -12,3 +13,3 @@ export declare function getFirstTextPosition(text: string, content: string): number[]; | ||
export declare function getPathsForComponentTemplates(root: string, maybeComponentName: string): string[]; | ||
export declare function getAddonImport(root: string, importPath: string): Promise<string[]>; | ||
export declare function getAddonPathsForType(root: string, collection: 'services' | 'models' | 'modifiers' | 'helpers' | 'routes', name: string): Promise<string[]>; | ||
export declare function getAddonImport(project: Project, importPath: string): Promise<string[]>; | ||
export declare function getAddonPathsForType(project: Project, collection: 'services' | 'models' | 'modifiers' | 'helpers' | 'routes', name: string): Promise<string[]>; |
@@ -144,3 +144,4 @@ "use strict"; | ||
exports.getPathsForComponentTemplates = getPathsForComponentTemplates; | ||
async function getAddonImport(root, importPath) { | ||
async function getAddonImport(project, importPath) { | ||
const { root, dependencyMap } = project; | ||
const importParts = importPath.split('/'); | ||
@@ -155,3 +156,3 @@ let addonName = importParts.shift(); | ||
const items = []; | ||
const [addonRoots, inRepoRoots] = await Promise.all([mProjectAddonsRoots(root), mProjectInRepoAddonsRoots(root)]); | ||
const [addonRoots, inRepoRoots] = await Promise.all([mProjectAddonsRoots(root, dependencyMap), mProjectInRepoAddonsRoots(root, dependencyMap)]); | ||
const roots = items.concat(addonRoots, inRepoRoots); | ||
@@ -194,5 +195,6 @@ let existingPaths = []; | ||
exports.getAddonImport = getAddonImport; | ||
async function getAddonPathsForType(root, collection, name) { | ||
async function getAddonPathsForType(project, collection, name) { | ||
const { root, dependencyMap } = project; | ||
const items = []; | ||
const [addonRoots, inRepoRoots] = await Promise.all([mProjectAddonsRoots(root), mProjectInRepoAddonsRoots(root)]); | ||
const [addonRoots, inRepoRoots] = await Promise.all([mProjectAddonsRoots(root, dependencyMap), mProjectInRepoAddonsRoots(root, dependencyMap)]); | ||
const roots = items.concat(addonRoots, inRepoRoots); | ||
@@ -199,0 +201,0 @@ let existingPaths = []; |
import * as memoize from 'memoizee'; | ||
import { CompletionItem } from 'vscode-languageserver/node'; | ||
import { BaseProject } from '../base-project'; | ||
import { Project } from '../project'; | ||
export declare const ADDON_CONFIG_KEY = "ember-language-server"; | ||
@@ -49,6 +50,6 @@ export declare function asyncFilter<T>(arr: T[], predicate: (value: unknown) => Promise<boolean | undefined>): Promise<T[]>; | ||
}; | ||
export declare function getProjectInRepoAddonsRoots(root: string): Promise<string[]>; | ||
export declare function getProjectInRepoAddonsRoots(root: string, dependencyMap: Project['dependencyMap']): Promise<string[]>; | ||
export declare function getDepIfExists(pack: PackageInfo, depName: string): string | null; | ||
export declare function isGlimmerXProject(root: string): Promise<boolean>; | ||
export declare function getProjectAddonsRoots(root: string, resolvedItems?: string[], packageFolderName?: string): Promise<string[]>; | ||
export declare function getProjectAddonsRoots(root: string, dependencyMap: Project['dependencyMap'], resolvedItems?: string[], packageFolderName?: string): Promise<string[]>; | ||
export declare function asyncGetPackageJSON(file: string): Promise<PackageInfo>; | ||
@@ -64,3 +65,3 @@ export declare function asyncGetJSON(filePath: string): Promise<PackageInfo>; | ||
export declare function hasAddonFolderInPath(name: string): boolean; | ||
export declare function getProjectAddonsInfo(root: string): Promise<void>; | ||
export declare function getProjectAddonsInfo(root: string, dependencyMap: Project['dependencyMap']): Promise<void>; | ||
export declare function listPodsComponents(project: BaseProject): Promise<void>; | ||
@@ -67,0 +68,0 @@ export declare function builtinModifiers(): CompletionItem[]; |
@@ -12,2 +12,3 @@ "use strict"; | ||
const walk_async_1 = require("./walk-async"); | ||
const logger_1 = require("./logger"); | ||
// const GLOBAL_REGISTRY = ['primitive-name'][['relatedFiles']]; | ||
@@ -157,4 +158,14 @@ exports.ADDON_CONFIG_KEY = 'ember-language-server'; | ||
exports.cached = cached; | ||
async function getRecursiveInRepoAddonRoots(root, roots) { | ||
const packageData = await asyncGetPackageJSON(root); | ||
async function getRecursiveInRepoAddonRoots(root, dependencyMap, roots) { | ||
let fastPackage = null; | ||
for (const dependencyMapItem of dependencyMap) { | ||
if (dependencyMapItem[1].root === root) { | ||
fastPackage = dependencyMapItem[1].package; | ||
break; | ||
} | ||
} | ||
const packageData = fastPackage || (await asyncGetPackageJSON(root)); | ||
// names are required for packages | ||
if (!packageData.name) | ||
return []; | ||
const emberAddonPaths = (packageData['ember-addon'] && packageData['ember-addon'].paths) || []; | ||
@@ -170,3 +181,16 @@ if (roots.length) { | ||
for (const validRoot of validPaths) { | ||
const packInfo = await asyncGetPackageJSON(validRoot); | ||
let fastPackage = null; | ||
for (const dependencyMapItem of dependencyMap) { | ||
if (dependencyMapItem[1].root === validRoot) { | ||
fastPackage = dependencyMapItem[1].package; | ||
break; | ||
} | ||
} | ||
const packInfo = fastPackage || (await asyncGetPackageJSON(validRoot)); | ||
// names are required for packages | ||
if (!packInfo.name) | ||
continue; | ||
if (!fastPackage) { | ||
dependencyMap.set(packInfo.name, { root: validRoot, package: packInfo }); | ||
} | ||
// we don't need to go deeper if package itself not an ember-addon or els-extension | ||
@@ -178,3 +202,3 @@ if (!isEmberAddon(packInfo) && !hasEmberLanguageServerExtension(packInfo)) { | ||
recursiveRoots.push(validRoot); | ||
const items = await getRecursiveInRepoAddonRoots(validRoot, recursiveRoots); | ||
const items = await getRecursiveInRepoAddonRoots(validRoot, dependencyMap, recursiveRoots); | ||
items.forEach((relatedRoot) => { | ||
@@ -189,4 +213,6 @@ if (!recursiveRoots.includes(relatedRoot)) { | ||
} | ||
async function getProjectInRepoAddonsRoots(root) { | ||
const roots = await getRecursiveInRepoAddonRoots(root, []); | ||
async function getProjectInRepoAddonsRoots(root, dependencyMap) { | ||
const time = (0, logger_1.instrumentTime)(`getProjectInRepoAddonsRoots(${root})`); | ||
const roots = await getRecursiveInRepoAddonRoots(root, dependencyMap, []); | ||
time.log(`finished getRecursiveInRepoAddonRoots`); | ||
return Array.from(new Set(roots)); | ||
@@ -222,4 +248,16 @@ } | ||
exports.isGlimmerXProject = isGlimmerXProject; | ||
async function getProjectAddonsRoots(root, resolvedItems = [], packageFolderName = 'node_modules') { | ||
const pack = await asyncGetPackageJSON(root); | ||
async function getProjectAddonsRoots(root, dependencyMap, resolvedItems = [], packageFolderName = 'node_modules') { | ||
const time = (0, logger_1.instrumentTime)(`getProjectInRepoAddonsRoots(${root})`); | ||
let fastPackage = null; | ||
for (const dependencyMapItem of dependencyMap) { | ||
if (dependencyMapItem[1].root === root) { | ||
fastPackage = dependencyMapItem[1].package; | ||
break; | ||
} | ||
} | ||
const pack = fastPackage || (await asyncGetPackageJSON(root)); | ||
if (!pack.name) { | ||
(0, logger_1.logDebugInfo)('no name', root, JSON.stringify(pack), Array.from(dependencyMap), resolvedItems); | ||
return []; | ||
} | ||
if (resolvedItems.length) { | ||
@@ -235,9 +273,23 @@ if (!isEmberAddon(pack)) { | ||
const rawRoots = await Promise.all(items.map(async (item) => { | ||
return await resolvePackageRoot(root, item, packageFolderName); | ||
var _a; | ||
if (dependencyMap.has(item)) { | ||
return [item, (_a = dependencyMap.get(item).root) !== null && _a !== void 0 ? _a : false]; | ||
} | ||
const packageRoot = await resolvePackageRoot(root, item, packageFolderName); | ||
return [item, packageRoot]; | ||
})); | ||
const roots = rawRoots.filter((p) => { | ||
const _roots = rawRoots.filter(([, p]) => { | ||
return p !== false; | ||
}); | ||
const recursiveRoots = resolvedItems.slice(0); | ||
const packages = await Promise.all(roots.map((root) => asyncGetPackageJSON(root))); | ||
const packages = await Promise.all(_roots.map(async ([packageName, packageRoot]) => { | ||
const mappedValue = dependencyMap.get(packageName); | ||
if (mappedValue) { | ||
return mappedValue.package; | ||
} | ||
const packInfo = await asyncGetPackageJSON(packageRoot); | ||
dependencyMap.set(packageName, { root: packageRoot, package: packInfo }); | ||
return packInfo; | ||
})); | ||
const roots = _roots.map(([, p]) => p); | ||
for (const rootItem of roots) { | ||
@@ -251,3 +303,3 @@ const packInfo = packages[roots.indexOf(rootItem)]; | ||
recursiveRoots.push(rootItem); | ||
const addonRoots = await getProjectAddonsRoots(rootItem, recursiveRoots, packageFolderName); | ||
const addonRoots = await getProjectAddonsRoots(rootItem, dependencyMap, recursiveRoots, packageFolderName); | ||
addonRoots.forEach((item) => { | ||
@@ -260,2 +312,3 @@ if (!recursiveRoots.includes(item)) { | ||
} | ||
time.log(`Finished looping over ${roots.length} roots`); | ||
return recursiveRoots; | ||
@@ -330,5 +383,8 @@ } | ||
exports.hasAddonFolderInPath = hasAddonFolderInPath; | ||
async function getProjectAddonsInfo(root) { | ||
async function getProjectAddonsInfo(root, dependencyMap) { | ||
var _a, _b; | ||
const [projectAddonsRoots, projectInRepoAddonsRoots] = await Promise.all([getProjectAddonsRoots(root), getProjectInRepoAddonsRoots(root)]); | ||
const [projectAddonsRoots, projectInRepoAddonsRoots] = await Promise.all([ | ||
getProjectAddonsRoots(root, dependencyMap), | ||
getProjectInRepoAddonsRoots(root, dependencyMap), | ||
]); | ||
const roots = [].concat(projectAddonsRoots, projectInRepoAddonsRoots).filter((pathItem) => typeof pathItem === 'string'); | ||
@@ -335,0 +391,0 @@ for (const packagePath of roots) { |
@@ -6,2 +6,6 @@ import { RemoteConsole } from 'vscode-languageserver/node'; | ||
export declare function logInfo(str: string): void; | ||
export declare function instrumentTime(label: string): { | ||
reset: () => void; | ||
log: (msg: string) => void; | ||
}; | ||
export declare function setConsole(item: RemoteConsole | null): void; | ||
@@ -8,0 +12,0 @@ export declare function safeStringify(obj: unknown, indent?: number): string; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.log = exports.logDebugInfo = exports.safeStringify = exports.setConsole = exports.logInfo = exports.logError = void 0; | ||
exports.log = exports.logDebugInfo = exports.safeStringify = exports.setConsole = exports.instrumentTime = exports.logInfo = exports.logError = void 0; | ||
const util = require("util"); | ||
@@ -38,2 +38,17 @@ const path_1 = require("path"); | ||
exports.logInfo = logInfo; | ||
function instrumentTime(label) { | ||
let last = Date.now(); | ||
return { | ||
reset: () => { | ||
last = Date.now(); | ||
}, | ||
log: (msg) => { | ||
const now = Date.now(); | ||
const diff = now - last; | ||
last = now; | ||
logInfo(`[${label}] +${diff}ms :: ${msg}`); | ||
}, | ||
}; | ||
} | ||
exports.instrumentTime = instrumentTime; | ||
function setConsole(item) { | ||
@@ -40,0 +55,0 @@ remoteConsole = item; |
@@ -23,3 +23,3 @@ "use strict"; | ||
}; | ||
this.ignores = ['/tmp/', '/dist/', '/.git/']; | ||
this.ignores = ['/tmp/', '/dist/', '/.git/', '/.embroider/']; | ||
} | ||
@@ -26,0 +26,0 @@ setIgnores(ignores) { |
{ | ||
"name": "@ember-tooling/ember-language-server", | ||
"description": "A language server implementation for Ember.js projects.", | ||
"version": "2.30.3", | ||
"version": "2.30.4", | ||
"contributors": [ | ||
@@ -6,0 +6,0 @@ "Aleksandr Kanunnikov <lifeart92@gmail.com>" |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
15456588
0.13%172
0.58%26761
0.41%