Skip to content

Commit

Permalink
Use nextTick
Browse files Browse the repository at this point in the history
  • Loading branch information
ecmel committed Jan 7, 2021
1 parent d59f8c7 commit 1ef9c7a
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 16 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

All notable changes to the extension will be documented in this file.

## [1.6.4] -

- Use nextTick()

## [1.6.3] - 2021-01-07

- Added Handlebars inheritance (https://jknack.github.io/handlebars.java/reuse.html).
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "vscode-html-css",
"displayName": "HTML CSS Support",
"description": "CSS Intellisense for HTML",
"version": "1.6.3",
"version": "1.6.4",
"publisher": "ecmel",
"license": "MIT",
"homepage": "https://github.com/ecmel/vscode-html-css",
Expand Down
31 changes: 16 additions & 15 deletions src/completion.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import fetch from "node-fetch";
import { nextTick } from "process";
import { parse, walk } from "css-tree";
import { basename, dirname, extname, isAbsolute, join } from "path";
import {
Expand All @@ -25,20 +26,20 @@ export type Validation = {
class: boolean
};

export type Selectors = {
export type Selector = {
ids: Map<string, CompletionItem>,
idRanges: Range[],
classes: Map<string, CompletionItem>,
classRanges: Range[]
rangesId: Range[],
rangesClass: Range[]
};

export class SelectorCompletionItemProvider implements CompletionItemProvider, Disposable {

readonly start = new Position(0, 0);
readonly cache = new Map<string, Map<string, CompletionItem>>();
readonly watchers = new Map<string, Disposable>();
readonly selectors = new Map<string, Selectors>();
readonly collection = languages.createDiagnosticCollection();
readonly selectors = new Map<string, Selector>();
readonly warnings = languages.createDiagnosticCollection();
readonly isRemote = /^https?:\/\//i;
readonly findLinkRel = /rel\s*=\s*("|')((?:(?!\1).)+)\1/si;
readonly findLinkHref = /href\s*=\s*("|')((?:(?!\1).)+)\1/si;
Expand All @@ -49,7 +50,7 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
this.cache.clear();
this.watchers.clear();
this.selectors.clear();
this.collection.dispose();
this.warnings.dispose();
}

watchFile(uri: Uri, listener: (e: Uri) => any) {
Expand Down Expand Up @@ -225,8 +226,8 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D

const ids = new Map<string, CompletionItem>();
const classes = new Map<string, CompletionItem>();
const idRanges: Range[] = [];
const classRanges: Range[] = [];
const rangesId: Range[] = [];
const rangesClass: Range[] = [];

keys.forEach(key => this.cache.get(key)?.forEach((v, k) =>
(v.kind === CompletionItemKind.Value ? ids : classes).set(k, v)));
Expand All @@ -242,7 +243,7 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
- attribute[3].length
+ attribute[3].indexOf(attribute[2]);

(attribute[1] === "id" ? idRanges : classRanges).push(new Range(
(attribute[1] === "id" ? rangesId : rangesClass).push(new Range(
document.positionAt(offset),
document.positionAt(findAttribute.lastIndex - 1)));

Expand Down Expand Up @@ -271,8 +272,8 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
}
}

this.collection.set(uri, diagnostics);
this.selectors.set(uri.toString(), { ids, idRanges, classes, classRanges });
this.warnings.set(uri, diagnostics);
this.selectors.set(uri.toString(), { ids, classes, rangesId, rangesClass });
}

provideCompletionItems(
Expand All @@ -282,7 +283,7 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
context: CompletionContext)
: ProviderResult<CompletionItem[] | CompletionList<CompletionItem>> {

return new Promise((resolve, reject) => {
return new Promise((resolve, reject) => nextTick(() => {
if (token.isCancellationRequested) {
reject();
return;
Expand All @@ -291,14 +292,14 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
const selector = this.selectors.get(document.uri.toString());

if (selector) {
for (const range of selector.classRanges) {
for (const range of selector.rangesClass) {
if (range.contains(position)) {
resolve([...selector.classes.values()]);
return;
}
}

for (const range of selector.idRanges) {
for (const range of selector.rangesId) {
if (range.contains(position)) {
resolve([...selector.ids.values()]);
return;
Expand All @@ -307,6 +308,6 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
}

reject();
});
}));
}
}

0 comments on commit 1ef9c7a

Please sign in to comment.