Skip to content

Commit bdbe497

Browse files
authored
Merge pull request #282 from abliger/master
Add verification function when saving
2 parents 8b83c28 + 3d76124 commit bdbe497

File tree

5 files changed

+60
-15
lines changed

5 files changed

+60
-15
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@ Configuration depends on your layout of the project but some samples are below:
7272
}
7373
```
7474

75+
```json
76+
{
77+
"css.vaildOnSaveOrChange": "Always"
78+
}
79+
```
80+
7581
### Lit
7682

7783
```json

package.json

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,17 @@
5959
"scope": "resource",
6060
"description": "List of local or remote style sheets for suggestions.",
6161
"default": []
62+
},
63+
"css.vaildOnSaveOrChange": {
64+
"enum": [
65+
"Always",
66+
"OnChange",
67+
"OnSave",
68+
"Never"
69+
],
70+
"default": "Never",
71+
"scope": "resource",
72+
"description": "Verify label class names when saving files."
6273
}
6374
}
6475
},
@@ -123,4 +134,4 @@
123134
"tslib": "^2.6.2",
124135
"typescript": "^5.3.3"
125136
}
126-
}
137+
}

src/extension.ts

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
window,
1111
workspace,
1212
} from "vscode";
13-
import { getEnabledLanguages } from "./settings";
13+
import { getEnabledLanguages, getVaildOnSaveOrChange, VaildOnSaveOrChange } from "./settings";
1414
import { Provider, clear, invalidate } from "./provider";
1515

1616
export function activate(context: ExtensionContext) {
@@ -21,14 +21,25 @@ export function activate(context: ExtensionContext) {
2121
context.subscriptions.push(
2222
languages.registerCompletionItemProvider(enabledLanguages, provider),
2323
languages.registerDefinitionProvider(enabledLanguages, provider),
24-
workspace.onDidSaveTextDocument((document) =>
25-
invalidate(document.uri.toString())
26-
),
24+
workspace.onDidSaveTextDocument((document) => {
25+
const vaildOnSaveOrChange = getVaildOnSaveOrChange();
26+
if (vaildOnSaveOrChange == VaildOnSaveOrChange.Always || vaildOnSaveOrChange == VaildOnSaveOrChange.OnSave) {
27+
commands.executeCommand("vscode-html-css.validate")
28+
} else {
29+
invalidate(document.uri.toString())
30+
}
31+
}),
2732
workspace.onDidCloseTextDocument((document) =>
2833
validations.delete(document.uri)
2934
),
30-
workspace.onDidChangeTextDocument((event) =>
31-
validations.delete(event.document.uri)
35+
workspace.onDidChangeTextDocument((event) => {
36+
const vaildOnSaveOrChange = getVaildOnSaveOrChange();
37+
if (vaildOnSaveOrChange == VaildOnSaveOrChange.Always || vaildOnSaveOrChange == VaildOnSaveOrChange.OnChange) {
38+
commands.executeCommand("vscode-html-css.validate")
39+
} else {
40+
validations.delete(event.document.uri)
41+
}
42+
}
3243
),
3344
commands.registerCommand("vscode-html-css.validate", async () => {
3445
const editor = window.activeTextEditor;
@@ -43,4 +54,4 @@ export function activate(context: ExtensionContext) {
4354
);
4455
}
4556

46-
export function deactivate() {}
57+
export function deactivate() { }

src/provider.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import {
2828
} from "vscode";
2929
import { getStyleSheets } from "./settings";
3030
import { Style, StyleType, parse } from "./parser";
31+
import path from "path";
3132

3233
const start = new Position(0, 0);
3334
const cache = new Map<string, Style[]>();
@@ -108,11 +109,14 @@ export class Provider implements CompletionItemProvider, DefinitionProvider {
108109
const map = new Map<string, CompletionItem>();
109110
const styles = await this.getStyles(document);
110111

111-
for (const value of styles.values()) {
112+
for (const [key, value] of styles) {
112113
for (const style of value) {
113114
if (style.type === type) {
114115
const item = new CompletionItem(
115-
style.selector,
116+
{
117+
label: style.selector,
118+
description: path.basename(key)
119+
},
116120
style.type === StyleType.ID
117121
? CompletionItemKind.Value
118122
: CompletionItemKind.Enum
@@ -153,12 +157,12 @@ export class Provider implements CompletionItemProvider, DefinitionProvider {
153157
return new Promise((resolve, reject) =>
154158
match && !token.isCancellationRequested
155159
? resolve(
156-
this.getCompletionItems(
157-
document,
158-
position,
159-
match[1] === "id" ? StyleType.ID : StyleType.CLASS
160-
)
160+
this.getCompletionItems(
161+
document,
162+
position,
163+
match[1] === "id" ? StyleType.ID : StyleType.CLASS
161164
)
165+
)
162166
: reject()
163167
);
164168
}

src/settings.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,16 @@ export function getStyleSheets(uri: Uri): string[] {
1616
.getConfiguration("css", uri)
1717
.get<string[]>("styleSheets", []);
1818
}
19+
20+
export function getVaildOnSaveOrChange(): VaildOnSaveOrChange {
21+
return workspace
22+
.getConfiguration("css")
23+
.get<VaildOnSaveOrChange>("vaildOnSaveOrChange", VaildOnSaveOrChange.Never);
24+
}
25+
26+
export enum VaildOnSaveOrChange {
27+
Always = "Always",
28+
OnChange = "OnChange",
29+
OnSave = "OnSave",
30+
Never = "Never"
31+
}

0 commit comments

Comments
 (0)