@@ -14,7 +14,9 @@ const path = require("path")
1414const fs = require ( "fs-extra" )
1515const parse = require ( ".." ) . parse
1616const parseForESLint = require ( ".." ) . parseForESLint
17- const CLIEngine = require ( "./fixtures/eslint" ) . CLIEngine
17+ const eslint = require ( "./fixtures/eslint" )
18+ const CLIEngine = eslint . CLIEngine
19+ const Linter = eslint . Linter
1820
1921//------------------------------------------------------------------------------
2022// Helpers
@@ -513,4 +515,32 @@ describe("Basic tests", () => {
513515 )
514516 } )
515517 } )
518+
519+ describe ( "parserServices.defineTemplateBodyVisitor" , ( ) => {
520+ it ( "should work even if AST object was reused." , ( ) => {
521+ const code = "<template><div/></template>"
522+ const config = {
523+ parser : PARSER_PATH ,
524+ rules : {
525+ "test-rule" : "error" ,
526+ } ,
527+ }
528+ const linter = new Linter ( )
529+
530+ //eslint-disable-next-line no-shadow
531+ linter . defineRule ( "test-rule" , ( context ) => context . parserServices . defineTemplateBodyVisitor ( {
532+ "VElement[name='div']" ( node ) {
533+ context . report ( { node, message : "OK" } )
534+ } ,
535+ } ) )
536+
537+ const messages1 = linter . verify ( code , config )
538+ const messages2 = linter . verify ( linter . getSourceCode ( ) , config )
539+
540+ assert . equal ( messages1 . length , 1 )
541+ assert . equal ( messages1 [ 0 ] . message , "OK" )
542+ assert . equal ( messages2 . length , 1 )
543+ assert . equal ( messages1 [ 0 ] . message , "OK" )
544+ } )
545+ } )
516546} )
0 commit comments