Skip to content

Commit 610eff3

Browse files
authored
Run local eslint rules directly as typescript (#2312)
* Run local eslint rules directly as typescript Remove the need to use `tsx` * Bump required node version Matches the version we use in vscode repo * Align node versions * Always use `/` * Try fixing windows * Try another fix for windows
1 parent 6662a74 commit 610eff3

21 files changed

+64
-60
lines changed

.eslintplugin/index.js

Lines changed: 0 additions & 18 deletions
This file was deleted.

.eslintplugin/index.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
import type { LooseRuleDefinition } from '@typescript-eslint/utils/ts-eslint';
6+
import * as glob from 'glob';
7+
import path from 'path';
8+
9+
// Re-export all .ts files as rules
10+
const rules: Record<string, LooseRuleDefinition> = {};
11+
await Promise.all(
12+
glob.sync('*.ts', { cwd: import.meta.dirname })
13+
.filter(file => !file.endsWith('index.ts') && !file.endsWith('utils.ts'))
14+
.map(async file => {
15+
rules[path.basename(file, '.ts')] = (await import('./' + file)).default;
16+
})
17+
);
18+
19+
export { rules };

.eslintplugin/no-bad-gdpr-comment.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55

66
import * as eslint from 'eslint';
77

8-
export = new class NoBadGDPRComment implements eslint.Rule.RuleModule {
8+
export default new class NoBadGDPRComment implements eslint.Rule.RuleModule {
99

1010
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
1111

1212
return {
1313
['Program'](node) {
14-
for (const comment of (<eslint.AST.Program>node).comments) {
14+
for (const comment of (node as eslint.AST.Program).comments) {
1515
if (comment.type !== 'Block' || !comment.loc) {
1616
continue;
1717
}

.eslintplugin/no-funny-filename.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import * as eslint from 'eslint';
77
import { readdirSync } from 'fs';
88
import path from 'path';
99

10-
export = new class NoTestOnly implements eslint.Rule.RuleModule {
10+
export default new class NoTestOnly implements eslint.Rule.RuleModule {
1111

1212
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
1313

.eslintplugin/no-gdpr-event-name-mismatch.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import { TSESTree } from '@typescript-eslint/typescript-estree';
77
import * as eslint from 'eslint';
88

9-
export = new class NoGDPREventNameMismatch implements eslint.Rule.RuleModule {
9+
export default new class NoGDPREventNameMismatch implements eslint.Rule.RuleModule {
1010

1111
readonly meta: eslint.Rule.RuleMetaData = {
1212
type: "problem",
@@ -56,7 +56,7 @@ export = new class NoGDPREventNameMismatch implements eslint.Rule.RuleModule {
5656

5757
return {
5858
['ExpressionStatement MemberExpression Identifier[name=/^send.*TelemetryEvent$/]'](node: any) {
59-
const esNode = <TSESTree.Identifier>node;
59+
const esNode = node as TSESTree.Identifier;
6060
const gdprCommentEventName = getEventNameFromLeadingGdprComment(esNode);
6161
if (!gdprCommentEventName) {
6262
return;

.eslintplugin/no-instanceof-uri.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import * as eslint from 'eslint';
77

8-
export = new class NoInstanceofUri implements eslint.Rule.RuleModule {
8+
export default new class NoInstanceofUri implements eslint.Rule.RuleModule {
99
readonly meta: eslint.Rule.RuleMetaData = {
1010
type: "problem",
1111
fixable: "code",

.eslintplugin/no-missing-linebreak.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import * as eslint from 'eslint';
77

8-
export = new class MissingTSXLinebreak implements eslint.Rule.RuleModule {
8+
export default new class MissingTSXLinebreak implements eslint.Rule.RuleModule {
99

1010
readonly meta: eslint.Rule.RuleMetaData = {
1111
type: "problem",

.eslintplugin/no-restricted-copilot-pr-string.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import * as eslint from 'eslint';
77

8-
export = new class NoBadGDPRComment implements eslint.Rule.RuleModule {
8+
export default new class NoBadGDPRComment implements eslint.Rule.RuleModule {
99
readonly meta: eslint.Rule.RuleMetaData = {
1010
type: 'problem',
1111
docs: {

.eslintplugin/no-runtime-import.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import { TSESTree } from '@typescript-eslint/typescript-estree';
77
import * as eslint from 'eslint';
88
import { dirname, join, relative } from 'path';
99
import picomatch from 'picomatch';
10-
import { createImportRuleListener } from './utils';
10+
import { createImportRuleListener } from './utils.ts';
1111

12-
export = new class implements eslint.Rule.RuleModule {
12+
export default new class implements eslint.Rule.RuleModule {
1313

1414
readonly meta: eslint.Rule.RuleMetaData = {
1515
messages: {
@@ -30,13 +30,13 @@ export = new class implements eslint.Rule.RuleModule {
3030
};
3131

3232
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
33-
let fileRelativePath = relative(dirname(__dirname), context.getFilename());
33+
let fileRelativePath = relative(dirname(import.meta.dirname), context.getFilename());
3434
fileRelativePath = fileRelativePath.replace(/\\/g, '/');
3535

3636
if (!fileRelativePath.endsWith('/')) {
3737
fileRelativePath += '/';
3838
}
39-
const ruleArgs = <Record<string, string[]>>context.options[0];
39+
const ruleArgs = context.options[0] as Record<string, string[]>;
4040

4141
const matchingKey = Object.keys(ruleArgs).find(key => fileRelativePath.startsWith(key) || picomatch(key)(fileRelativePath));
4242
if (!matchingKey) {

.eslintplugin/no-test-imports.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55

66
import * as eslint from 'eslint';
77
import { dirname, join } from 'path';
8-
import { createImportRuleListener } from './utils';
8+
import { createImportRuleListener } from './utils.ts';
99

10-
export = new class implements eslint.Rule.RuleModule {
10+
export default new class implements eslint.Rule.RuleModule {
1111

1212
readonly meta: eslint.Rule.RuleMetaData = {};
1313

0 commit comments

Comments
 (0)