@@ -16,7 +16,22 @@ const { writeFileSync, readFileSync } = require('node:fs');
1616const { join } = require ( 'node:path' ) ;
1717
1818const gjsGtsParser = require . resolve ( 'ember-eslint-parser' ) ;
19- const isESLint9OrLater = Number . parseInt ( eslintVersion . split ( '.' ) [ 0 ] , 10 ) >= 9 ;
19+ const eslintMajorVersion = Number . parseInt ( eslintVersion . split ( '.' ) [ 0 ] , 10 ) ;
20+ const isESLint9OrLater = eslintMajorVersion >= 9 ;
21+ const isESLint10OrLater = eslintMajorVersion >= 10 ;
22+
23+ /**
24+ * Helper to create expected error object, conditionally excluding nodeType for ESLint 10+
25+ * @param {Object } error - Expected error properties
26+ * @returns {Object } Error object with nodeType removed if ESLint 10+
27+ */
28+ function expectedError ( error ) {
29+ if ( isESLint10OrLater ) {
30+ const { nodeType, ...rest } = error ;
31+ return rest ;
32+ }
33+ return error ;
34+ }
2035
2136/**
2237 * Helper function which creates ESLint instance with enabled/disabled autofix feature.
@@ -581,6 +596,10 @@ describe('template-vars', () => {
581596 const expected = errors [ index ] ;
582597
583598 for ( const key of Object . keys ( expected ) ) {
599+ // Skip nodeType comparison in ESLint 10+ (removed from error objects)
600+ if ( isESLint10OrLater && key === 'nodeType' ) {
601+ continue ;
602+ }
584603 // Prefix with what key we are looking at so
585604 // that debugging is less painful
586605 const expectedString = `${ key } : ${ expected [ key ] } ` ;
@@ -623,29 +642,33 @@ describe('line/col numbers should be correct', () => {
623642 const resultErrors = results . flatMap ( ( result ) => result . messages ) ;
624643 expect ( resultErrors ) . toHaveLength ( 2 ) ;
625644
626- expect ( resultErrors [ 0 ] ) . toMatchObject ( {
627- column : 28 ,
628- endColumn : 64 ,
629- endLine : 13 ,
630- line : 13 ,
631- message : "Don't use Ember's array prototype extensions" ,
632- messageId : 'main' ,
633- nodeType : 'Literal' ,
634- ruleId : 'ember/no-array-prototype-extensions' ,
635- severity : 2 ,
636- } ) ;
637-
638- expect ( resultErrors [ 1 ] ) . toMatchObject ( {
639- column : 67 ,
640- endColumn : 80 ,
641- endLine : 13 ,
642- line : 13 ,
643- message : "Don't use Ember's array prototype extensions" ,
644- messageId : 'main' ,
645- nodeType : 'Literal' ,
646- ruleId : 'ember/no-array-prototype-extensions' ,
647- severity : 2 ,
648- } ) ;
645+ expect ( resultErrors [ 0 ] ) . toMatchObject (
646+ expectedError ( {
647+ column : 28 ,
648+ endColumn : 64 ,
649+ endLine : 13 ,
650+ line : 13 ,
651+ message : "Don't use Ember's array prototype extensions" ,
652+ messageId : 'main' ,
653+ nodeType : 'Literal' ,
654+ ruleId : 'ember/no-array-prototype-extensions' ,
655+ severity : 2 ,
656+ } )
657+ ) ;
658+
659+ expect ( resultErrors [ 1 ] ) . toMatchObject (
660+ expectedError ( {
661+ column : 67 ,
662+ endColumn : 80 ,
663+ endLine : 13 ,
664+ line : 13 ,
665+ message : "Don't use Ember's array prototype extensions" ,
666+ messageId : 'main' ,
667+ nodeType : 'Literal' ,
668+ ruleId : 'ember/no-array-prototype-extensions' ,
669+ severity : 2 ,
670+ } )
671+ ) ;
649672 } ) ;
650673} ) ;
651674
@@ -740,29 +763,33 @@ describe('multiple tokens in same file', () => {
740763 const resultErrors = results . flatMap ( ( result ) => result . messages ) ;
741764 expect ( resultErrors ) . toHaveLength ( 2 ) ;
742765
743- expect ( resultErrors [ 0 ] ) . toMatchObject ( {
744- column : 13 ,
745- endColumn : 16 ,
746- endLine : 5 ,
747- line : 5 ,
748- message : "'two' is assigned a value but never used." ,
749- messageId : 'unusedVar' ,
750- nodeType : 'Identifier' ,
751- ruleId : 'no-unused-vars' ,
752- severity : 2 ,
753- } ) ;
766+ expect ( resultErrors [ 0 ] ) . toMatchObject (
767+ expectedError ( {
768+ column : 13 ,
769+ endColumn : 16 ,
770+ endLine : 5 ,
771+ line : 5 ,
772+ message : "'two' is assigned a value but never used." ,
773+ messageId : 'unusedVar' ,
774+ nodeType : 'Identifier' ,
775+ ruleId : 'no-unused-vars' ,
776+ severity : 2 ,
777+ } )
778+ ) ;
754779
755- expect ( resultErrors [ 1 ] ) . toMatchObject ( {
756- column : 13 ,
757- endColumn : 18 ,
758- endLine : 7 ,
759- line : 7 ,
760- message : "'three' is assigned a value but never used." ,
761- messageId : 'unusedVar' ,
762- nodeType : 'Identifier' ,
763- ruleId : 'no-unused-vars' ,
764- severity : 2 ,
765- } ) ;
780+ expect ( resultErrors [ 1 ] ) . toMatchObject (
781+ expectedError ( {
782+ column : 13 ,
783+ endColumn : 18 ,
784+ endLine : 7 ,
785+ line : 7 ,
786+ message : "'three' is assigned a value but never used." ,
787+ messageId : 'unusedVar' ,
788+ nodeType : 'Identifier' ,
789+ ruleId : 'no-unused-vars' ,
790+ severity : 2 ,
791+ } )
792+ ) ;
766793 } ) ;
767794
768795 it ( 'handles duplicate template tokens' , async ( ) => {
@@ -777,29 +804,33 @@ describe('multiple tokens in same file', () => {
777804 const resultErrors = results . flatMap ( ( result ) => result . messages ) ;
778805 expect ( resultErrors ) . toHaveLength ( 2 ) ;
779806
780- expect ( resultErrors [ 0 ] ) . toMatchObject ( {
781- column : 13 ,
782- endColumn : 17 ,
783- endLine : 4 ,
784- line : 4 ,
785- message : "'tmpl' is assigned a value but never used." ,
786- messageId : 'unusedVar' ,
787- nodeType : 'Identifier' ,
788- ruleId : 'no-unused-vars' ,
789- severity : 2 ,
790- } ) ;
807+ expect ( resultErrors [ 0 ] ) . toMatchObject (
808+ expectedError ( {
809+ column : 13 ,
810+ endColumn : 17 ,
811+ endLine : 4 ,
812+ line : 4 ,
813+ message : "'tmpl' is assigned a value but never used." ,
814+ messageId : 'unusedVar' ,
815+ nodeType : 'Identifier' ,
816+ ruleId : 'no-unused-vars' ,
817+ severity : 2 ,
818+ } )
819+ ) ;
791820
792- expect ( resultErrors [ 1 ] ) . toMatchObject ( {
793- column : 31 ,
794- endColumn : 34 ,
795- endLine : 4 ,
796- line : 4 ,
797- message : "'Bad' is not defined." ,
798- messageId : 'undef' ,
799- nodeType : 'GlimmerElementNodePart' ,
800- ruleId : 'no-undef' ,
801- severity : 2 ,
802- } ) ;
821+ expect ( resultErrors [ 1 ] ) . toMatchObject (
822+ expectedError ( {
823+ column : 31 ,
824+ endColumn : 34 ,
825+ endLine : 4 ,
826+ line : 4 ,
827+ message : "'Bad' is not defined." ,
828+ messageId : 'undef' ,
829+ nodeType : 'GlimmerElementNodePart' ,
830+ ruleId : 'no-undef' ,
831+ severity : 2 ,
832+ } )
833+ ) ;
803834 } ) ;
804835
805836 it ( 'correctly maps tokens after handlebars' , async ( ) => {
0 commit comments