Skip to content

Commit 7aecd99

Browse files
committed
fix: handle ESLint 10 nodeType removal in parser tests
ESLint 10 removed the nodeType property from lint error objects. Update parser tests to conditionally exclude nodeType assertions when running on ESLint 10+.
1 parent 85460e5 commit 7aecd99

1 file changed

Lines changed: 99 additions & 68 deletions

File tree

tests/lib/rules-preprocessor/gjs-gts-parser-test.js

Lines changed: 99 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,22 @@ const { writeFileSync, readFileSync } = require('node:fs');
1616
const { join } = require('node:path');
1717

1818
const 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

Comments
 (0)