@@ -5,14 +5,16 @@ import * as cssService from "vscode-css-languageservice"
55import { TextDocument } from 'vscode-languageserver-textdocument' ;
66import { createPositions } from "../utils/createPosition" ;
77import { createVscodeDiagnostic } from "../utils/createVscodeDiagnostic" ;
8+ import { GlobalOffsets } from "../interface/GlobalOffsets" ;
89
910
1011export 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}
0 commit comments