Skip to content

Commit b6f8790

Browse files
refactor, and correct vscode diagnostic error duplicate errors
1 parent e2362c4 commit b6f8790

6 files changed

Lines changed: 73 additions & 80 deletions

File tree

src/class/CssValidator.ts

Lines changed: 59 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,16 @@ import * as cssService from "vscode-css-languageservice"
55
import { TextDocument } from 'vscode-languageserver-textdocument';
66
import { createPositions } from "../utils/createPosition";
77
import { createVscodeDiagnostic } from "../utils/createVscodeDiagnostic";
8+
import { GlobalOffsets } from "../interface/GlobalOffsets";
89

910

1011
export class CssValidator implements ICssValidator{
1112

1213
private CssTemplateArray: Array<{ cssTemplate: CssTagTemplate }>
1314
private document: vscode.TextDocument
14-
private diagnosticCollection: vscode.Diagnostic[]
1515
private cssLanguageService:cssService.LanguageService
16+
diagnosticCollection: vscode.Diagnostic[]
17+
1618

1719
constructor(CssTemplateArray: Array<{ cssTemplate: CssTagTemplate }>,
1820
document: vscode.TextDocument,
@@ -26,49 +28,61 @@ export class CssValidator implements ICssValidator{
2628
}
2729

2830
validate():void{
29-
for (const singleBlockOfCssTemplate of this.CssTemplateArray){
30-
31-
const virtualDocumentCssLangServ = TextDocument.create(
32-
this.document.uri.toString(),
33-
'css',
34-
this.document.version,
35-
singleBlockOfCssTemplate.cssTemplate.content)
36-
37-
const diagnostic = this.cssLanguageService.doValidation(
38-
virtualDocumentCssLangServ,
39-
this.cssLanguageService.parseStylesheet(
40-
virtualDocumentCssLangServ))
41-
42-
for (const singleDiagnostic of diagnostic){
43-
44-
const diagnosticSeverity = singleDiagnostic.severity!.valueOf as unknown as vscode.DiagnosticSeverity
45-
46-
const globalOffsets = createPositions(
47-
singleBlockOfCssTemplate.cssTemplate.tag,
48-
singleBlockOfCssTemplate.cssTemplate.pos,
49-
virtualDocumentCssLangServ.offsetAt(
50-
new vscode.Position(
51-
singleDiagnostic.range.start.line,
52-
singleDiagnostic.range.start.character
53-
)
54-
),
55-
virtualDocumentCssLangServ.offsetAt(
56-
new vscode.Position(
57-
singleDiagnostic.range.end.line,
58-
singleDiagnostic.range.end.character
59-
)
60-
)
61-
);
62-
this.diagnosticCollection.push(
63-
createVscodeDiagnostic(
64-
globalOffsets.globalStartOffset,
65-
globalOffsets.globalEndOffset,
66-
singleDiagnostic.message,
67-
diagnosticSeverity,
68-
this.document
69-
)
70-
)
71-
}
72-
}
31+
for (const singleBlockOfCssTemplate of this.CssTemplateArray){
32+
const vald = this.validateBlockOfCss(singleBlockOfCssTemplate.cssTemplate)
33+
}
34+
}
35+
36+
private createVirtualDocument(content: string):TextDocument{
37+
return TextDocument.create( this.document.uri.toString(),'css',this.document.version,content)
38+
}
39+
40+
private createDiagnosticCollForLangServ(virtualDocumentCssLangServ: TextDocument):cssService.Diagnostic[]{
41+
return this.cssLanguageService.doValidation(
42+
virtualDocumentCssLangServ,
43+
this.cssLanguageService.parseStylesheet(
44+
virtualDocumentCssLangServ))
45+
}
46+
47+
private validateBlockOfCss(singleBlockOfCssTemplate: CssTagTemplate){
48+
const virtualDocumentCssLangServ = this.createVirtualDocument(singleBlockOfCssTemplate.content)
49+
50+
const diagnosticCssLangServ = this.createDiagnosticCollForLangServ(virtualDocumentCssLangServ)
51+
52+
for (const singleDiagnostic of diagnosticCssLangServ){
53+
this.createDiagnostic(singleDiagnostic,singleBlockOfCssTemplate,virtualDocumentCssLangServ)
7354
}
55+
}
56+
57+
private createDiagnostic(singleDiagnostic:cssService.Diagnostic,singleBlockOfCssTemplate:CssTagTemplate,virtualDocumentCssLangServ:cssService.TextDocument){
58+
const diagnosticSeverity = singleDiagnostic.severity!.valueOf as unknown as vscode.DiagnosticSeverity
59+
60+
const globalOffsets = createPositions(
61+
singleBlockOfCssTemplate.tag,
62+
singleBlockOfCssTemplate.pos,
63+
virtualDocumentCssLangServ.offsetAt(
64+
new vscode.Position(
65+
singleDiagnostic.range.start.line,
66+
singleDiagnostic.range.start.character
67+
)
68+
),
69+
virtualDocumentCssLangServ.offsetAt(
70+
new vscode.Position(
71+
singleDiagnostic.range.end.line,
72+
singleDiagnostic.range.end.character
73+
)
74+
)
75+
);
76+
this.addDiagnostic(globalOffsets,singleDiagnostic.message,diagnosticSeverity)
77+
}
78+
79+
private addDiagnostic(globalOffsets: GlobalOffsets,message: string, severity: vscode.DiagnosticSeverity){
80+
this.diagnosticCollection.push(createVscodeDiagnostic(
81+
globalOffsets.globalStartOffset,
82+
globalOffsets.globalEndOffset,
83+
message,
84+
severity,
85+
this.document
86+
))
87+
}
7488
}

src/class/HtmlValidator.ts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,29 +13,23 @@ const htmlLanguageService = htmlService.getDefaultHTMLDataProvider();
1313
const customHtmlElements = new CustomElement();
1414

1515
export class HtmlValidator implements IHtmlValidator {
16+
1617
private validTagNames: Set<string>;
1718
private ps: Parse5;
1819
private document: vscode.TextDocument;
19-
private diagnosticCollection: vscode.Diagnostic[];
20-
private errorCollection: vscode.DiagnosticCollection
21-
22-
constructor(
23-
ps: Parse5,
24-
document: vscode.TextDocument,
25-
diagnosticCollection: vscode.Diagnostic[]
26-
) {
20+
diagnosticCollection: vscode.Diagnostic[];
21+
22+
constructor(ps: Parse5,document: vscode.TextDocument,diagnosticCollection: vscode.Diagnostic[]) {
2723
this.ps = ps;
2824
this.document = document;
2925
this.diagnosticCollection = diagnosticCollection;
3026
this.validTagNames = new Set(htmlLanguageService.provideTags().map(t => t.name));
31-
this.errorCollection = vscode.languages.createDiagnosticCollection("myExtension");
3227
}
3328

3429
validate(htmlTemplateArray: Array<{ htmlTemplate: HtmlTagTemplate }>): void {
3530
for (const template of htmlTemplateArray) {
3631
this.validateTemplate(template);
3732
}
38-
this.errorCollection.set(this.document.uri, this.diagnosticCollection);
3933
}
4034

4135
private validateTemplate(template: { htmlTemplate: HtmlTagTemplate }): void {

src/extension.ts

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,9 @@
11
import * as vscode from "vscode";
22
import { extractHtmlTemplates,extractCssTemplates } from './document/html-document/parse/html-tag-extractor';
3-
import { printInternalMessage } from "./utils/internalPrinter";
4-
import * as htmlService from "vscode-html-languageservice";
5-
import {ITagData} from "./interface/tagData"
6-
import { CustomElement } from "./class/customElement";
73
import * as cssService from "vscode-css-languageservice"
8-
import { TextDocument } from 'vscode-languageserver-textdocument';
9-
import { GlobalOffsets } from "./interface/GlobalOffsets";
10-
import { PositionOfContent } from "./interface/PositionOfContent";
114
import { HtmlTagTemplate } from "./interface/IHtmlTemplate";
125
import { CssTagTemplate } from "./interface/ICssTemplate";
136
import {HtmlValidator} from "./class/HtmlValidator"
14-
import { createPositions } from "./utils/createPosition";
15-
import { createVscodeDiagnostic } from "./utils/createVscodeDiagnostic";
167
import { CssValidator } from "./class/CssValidator";
178

189
type Parse5 = typeof import("parse5", { with: { "resolution-mode": "import" } });
@@ -81,13 +72,15 @@ function htmlValidator(
8172
).validate(htmlTemplateArray);
8273
}
8374

84-
function cssValidator(CssTemplateArray: Array<{ cssTemplate: CssTagTemplate }>,
75+
function cssValidator(
76+
cssTemplateArray: Array<{ cssTemplate: CssTagTemplate }>,
8577
document: vscode.TextDocument,
8678
diagnosticCollection: vscode.Diagnostic[],
87-
cssLanguageService: cssService.LanguageService)
79+
cssLanguageService: cssService.LanguageService
80+
):void
8881
{
8982
const validator = new CssValidator(
90-
CssTemplateArray,
83+
cssTemplateArray,
9184
document,
9285
diagnosticCollection,
9386
cssLanguageService
@@ -102,7 +95,6 @@ export async function activate(context: vscode.ExtensionContext) {
10295

10396
context.subscriptions.push(diagnostics);
10497

105-
//const disposable = vscode.commands.registerCommand("htmlCssTemplateValidator.validateDdocument", () => {
10698
vscode.window.showInformationMessage("Validator is now active");
10799

108100
const editor = vscode.window.activeTextEditor;
@@ -136,8 +128,5 @@ export async function activate(context: vscode.ExtensionContext) {
136128
vscode.workspace.onDidCloseTextDocument((doc) => diagnostics.delete(doc.uri))
137129
);
138130
};
139-
//});
140-
141-
//context.subscriptions.push(disposable);
142131
};
143132
export function deactivate() {}

src/interface/ICssValidator.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
1-
import { CssTagTemplate } from "./ICssTemplate"
21
import *as vscode from "vscode"
3-
import * as cssService from "vscode-css-languageservice"
42

53
export interface ICssValidator {
6-
validate(CssTemplateArray: Array<{ cssTemplate: CssTagTemplate }>,
7-
document: vscode.TextDocument,
8-
diagnosticCollection: vscode.Diagnostic[],
9-
cssLanguageService:cssService.LanguageService
10-
):void
4+
diagnosticCollection: vscode.Diagnostic[]
5+
validate():void
116
}

src/interface/IHtmlValidator.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { HtmlTagTemplate } from "../interface/IHtmlTemplate";
2+
import * as vscode from "vscode"
23

34
export interface IHtmlValidator{
5+
diagnosticCollection: vscode.Diagnostic[];
46
validate(htmlTemplateArray: Array<{ htmlTemplate: HtmlTagTemplate }>): void
57
}

src/utils/createPosition.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ import { PositionOfContent } from "../interface/PositionOfContent";
44
export function createPositions(
55
templateTag: string,
66
templateStartPos: PositionOfContent,
7-
startOff: number, endOff: number)
8-
:GlobalOffsets
7+
startOff: number, endOff: number):GlobalOffsets
98
{
109
// +1 for the opening backtick of the tag
1110
const globalStartOffset = startOff + templateStartPos.startOffset + templateTag.length + 1;

0 commit comments

Comments
 (0)