@@ -7,6 +7,7 @@ import * as path from "path"
77import * as AST from "./ast"
88import { LocationCalculatorForHtml } from "./common/location-calculator"
99import { HTMLParser , HTMLTokenizer } from "./html"
10+ import { PugParser , PugTokenizer } from "./pug"
1011import { parseScript , parseScriptElement } from "./script"
1112import * as services from "./parser-services"
1213import type { ParserOptions } from "./common/parser-options"
@@ -74,9 +75,15 @@ export function parseForESLint(
7475 ecmaVersion : options . ecmaVersion || DEFAULT_ECMA_VERSION ,
7576 }
7677 const skipParsingScript = options . parser === false
77- const tokenizer = new HTMLTokenizer ( code , optionsForTemplate )
78- const rootAST = new HTMLParser ( tokenizer , optionsForTemplate ) . parse ( )
79-
78+ let tokenizer : HTMLTokenizer | PugTokenizer
79+ let rootAST : AST . VDocumentFragment
80+ if ( / ^ \< t e m p l a t e \s + l a n g \= [ " ' ] p u g [ " ' ] \> / i. test ( code ) ) {
81+ tokenizer = new PugTokenizer ( code , optionsForTemplate )
82+ rootAST = new PugParser ( tokenizer , optionsForTemplate ) . parse ( )
83+ } else {
84+ tokenizer = new HTMLTokenizer ( code , optionsForTemplate )
85+ rootAST = new HTMLParser ( tokenizer as HTMLTokenizer , optionsForTemplate ) . parse ( )
86+ }
8087 locationCalculator = new LocationCalculatorForHtml (
8188 tokenizer . gaps ,
8289 tokenizer . lineTerminators ,
@@ -90,7 +97,7 @@ export function parseForESLint(
9097 errors : rootAST . errors ,
9198 }
9299 const templateBody =
93- template != null && templateLang === "html"
100+ template != null && ( templateLang === "html" || templateLang === "pug" )
94101 ? Object . assign ( template , concreteInfo )
95102 : undefined
96103
0 commit comments