11import * as vscode from "vscode" ;
2- import { extractHtmlTemplates , extractCssTemplates } from './document/html-document/parse/html-tag-extractor' ;
3- import * as cssService from "vscode-css-languageservice"
2+ import { extractCssTemplateBlock } from "./utils/extractCssTemplateBlock" ;
43import { HtmlTagTemplate } from "./interface/IHtmlTemplate" ;
54import { CssTagTemplate } from "./interface/ICssTemplate" ;
65import { HtmlValidator } from "./class/HtmlValidator"
76import { CssValidator } from "./class/CssValidator" ;
7+ import { extractHtmlTemplateBlock } from "./utils/extractHtmlTemplateBlock" ;
88
99type Parse5 = typeof import ( "parse5" , { with : { "resolution-mode" : "import" } } ) ;
1010// error collection of vs code
1111const errorCollection = vscode . languages . createDiagnosticCollection ( "myExtension" ) ;
1212
13- const cssLanguageService = cssService . getCSSLanguageService ( )
14-
15- function extractHtmlAndCssBlocks ( document : vscode . TextDocument
16- ) : {
17- contentArrayOfHtmlTemplates :Array < { htmlTemplate : HtmlTagTemplate } > ,
18- contentArrayOfCssTemplates :Array < { cssTemplate : CssTagTemplate } >
19- } | undefined
20- {
21- // vs code document text
22- const documentText = document . getText ( ) ;
23- // extracted html templates found in documentText
24- const htmlTemplates = extractHtmlTemplates ( documentText ) ;
25- // extracted css templates found in documentText
26- const cssTemplates = extractCssTemplates ( documentText ) ;
27- // Arrays to return
28- const contentArrayOfHtmlTemplates : Array < { htmlTemplate : HtmlTagTemplate } > = [ ] ;
29-
30- const contentArrayOfCssTemplates : Array < { cssTemplate : CssTagTemplate } > = [ ] ;
31-
32- htmlTemplates . forEach ( ( template , i ) =>
33- {
34- contentArrayOfHtmlTemplates . push ( {
35- htmlTemplate :{
36- tag : template . tag ,
37- content : template . content ,
38- pos : { startOffset : template . startPos , endOffset : template . endPos } } } ) ;
39- }
40- ) ;
41- cssTemplates . forEach ( ( template , i ) =>
42- {
43- contentArrayOfCssTemplates . push ( {
44- cssTemplate :{
45- tag : template . tag ,
46- content : template . content ,
47- pos : { startOffset : template . startPos , endOffset : template . endPos } } } ) ;
48- }
49- ) ;
50- if ( contentArrayOfCssTemplates . length === 0 && contentArrayOfHtmlTemplates . length === 0 ) {
51- vscode . window . showErrorMessage ( `didn't find a valid css or html template tag` )
52- return undefined
53- }
54-
55- return {
56- contentArrayOfCssTemplates : contentArrayOfCssTemplates ,
57- contentArrayOfHtmlTemplates : contentArrayOfHtmlTemplates
58- } ;
59- }
60-
6113function htmlValidator (
6214 ps : Parse5 ,
6315 htmlTemplateArray : Array < { htmlTemplate : HtmlTagTemplate } > ,
@@ -75,19 +27,16 @@ function htmlValidator(
7527function cssValidator (
7628 cssTemplateArray : Array < { cssTemplate : CssTagTemplate } > ,
7729 document : vscode . TextDocument ,
78- diagnosticCollection : vscode . Diagnostic [ ] ,
79- cssLanguageService : cssService . LanguageService
30+ diagnosticCollection : vscode . Diagnostic [ ]
8031) :void
8132 {
8233 const validator = new CssValidator (
8334 cssTemplateArray ,
8435 document ,
85- diagnosticCollection ,
86- cssLanguageService
36+ diagnosticCollection
8737 ) . validate ( ) ;
8838}
8939
90-
9140export async function activate ( context : vscode . ExtensionContext ) {
9241 const ps = await import ( "parse5" ) ;
9342
@@ -96,37 +45,33 @@ export async function activate(context: vscode.ExtensionContext) {
9645 context . subscriptions . push ( diagnostics ) ;
9746
9847 vscode . window . showInformationMessage ( "Validator is now active" ) ;
99-
100- const editor = vscode . window . activeTextEditor ;
101-
102- if ( editor )
103- {
104- const timers = new Map < string , NodeJS . Timeout > ( ) ;
105- const schedule = ( doc : vscode . TextDocument ) => {
106- if ( timers . get ( doc . uri . toString ( ) ) ) clearTimeout ( timers . get ( doc . uri . toString ( ) ) ) ;
107- timers . set
108- (
109- doc . uri . toString ( ) , setTimeout
110- ( ( ) =>
111- {
112- const diagnosticCollection : vscode . Diagnostic [ ] = [ ] ;
113-
114- const templates = extractHtmlAndCssBlocks ( doc ) ;
115- if ( ! templates ) { return }
116- htmlValidator ( ps , templates . contentArrayOfHtmlTemplates , doc , diagnosticCollection ) ;
117- cssValidator ( templates . contentArrayOfCssTemplates , doc , diagnosticCollection , cssLanguageService )
118-
119- errorCollection . set ( doc . uri , diagnosticCollection )
120- }
121- )
122- )
48+ const timers = new Map < string , NodeJS . Timeout > ( ) ;
49+ const schedule = ( doc : vscode . TextDocument ) => {
50+ if ( timers . get ( doc . uri . toString ( ) ) ) clearTimeout ( timers . get ( doc . uri . toString ( ) ) ) ;
51+ timers . set
52+ (
53+ doc . uri . toString ( ) , setTimeout
54+ ( ( ) =>
55+ {
56+ const diagnosticCollection : vscode . Diagnostic [ ] = [ ] ;
57+
58+ const htmlTemplates = extractHtmlTemplateBlock ( doc ) ;
59+ if ( ! htmlTemplates ) { return }
60+ htmlValidator ( ps , htmlTemplates , doc , diagnosticCollection ) ;
61+ const cssTemplates = extractCssTemplateBlock ( doc )
62+ if ( ! cssTemplates ) { return }
63+ cssValidator ( cssTemplates , doc , diagnosticCollection )
64+
65+ errorCollection . set ( doc . uri , diagnosticCollection )
12366 }
67+ )
68+ )
69+ }
12470
125- context . subscriptions . push (
126- vscode . workspace . onDidChangeTextDocument ( ( e ) => schedule ( e . document ) ) ,
127- vscode . workspace . onDidOpenTextDocument ( ( doc ) => schedule ( doc ) ) ,
128- vscode . workspace . onDidCloseTextDocument ( ( doc ) => diagnostics . delete ( doc . uri ) )
129- ) ;
130- } ;
71+ context . subscriptions . push (
72+ vscode . workspace . onDidChangeTextDocument ( ( e ) => schedule ( e . document ) ) ,
73+ vscode . workspace . onDidOpenTextDocument ( ( doc ) => schedule ( doc ) ) ,
74+ vscode . workspace . onDidCloseTextDocument ( ( doc ) => diagnostics . delete ( doc . uri ) )
75+ ) ;
13176} ;
13277export function deactivate ( ) { }
0 commit comments