@@ -7,6 +7,7 @@ import * as path from "path"
7
7
import * as AST from "./ast"
8
8
import { LocationCalculatorForHtml } from "./common/location-calculator"
9
9
import { HTMLParser , HTMLTokenizer } from "./html"
10
+ import { PugParser , PugTokenizer } from "./pug"
10
11
import { parseScript , parseScriptElement } from "./script"
11
12
import * as services from "./parser-services"
12
13
import type { ParserOptions } from "./common/parser-options"
@@ -87,9 +88,15 @@ export function parseForESLint(
87
88
ecmaVersion : options . ecmaVersion || DEFAULT_ECMA_VERSION ,
88
89
}
89
90
const skipParsingScript = options . parser === false
90
- const tokenizer = new HTMLTokenizer ( code , optionsForTemplate )
91
- const rootAST = new HTMLParser ( tokenizer , optionsForTemplate ) . parse ( )
92
-
91
+ let tokenizer : HTMLTokenizer | PugTokenizer
92
+ let rootAST : AST . VDocumentFragment
93
+ if ( / ^ \< t e m p l a t e \s + l a n g \= [ " ' ] p u g [ " ' ] \> / i. test ( code ) ) {
94
+ tokenizer = new PugTokenizer ( code , optionsForTemplate )
95
+ rootAST = new PugParser ( tokenizer , optionsForTemplate ) . parse ( )
96
+ } else {
97
+ tokenizer = new HTMLTokenizer ( code , optionsForTemplate )
98
+ rootAST = new HTMLParser ( tokenizer as HTMLTokenizer , optionsForTemplate ) . parse ( )
99
+ }
93
100
locationCalculator = new LocationCalculatorForHtml (
94
101
tokenizer . gaps ,
95
102
tokenizer . lineTerminators ,
@@ -103,7 +110,7 @@ export function parseForESLint(
103
110
errors : rootAST . errors ,
104
111
}
105
112
const templateBody =
106
- template != null && templateLang === "html"
113
+ template != null && ( templateLang === "html" || templateLang === "pug" )
107
114
? Object . assign ( template , concreteInfo )
108
115
: undefined
109
116
0 commit comments