Skip to content

Commit

Permalink
feat: add transform for v9 migration (#29)
Browse files Browse the repository at this point in the history
* feat: add transform for v9 migration

* chore: add test cases

* chore: remove unwanted changes

* chore: fix tests on windows

* feat: cover more cases

* fix: cover more cases

* docs: update

* fix: cover more edge cases
  • Loading branch information
snitin315 authored Jun 6, 2024
1 parent 61b9ffe commit 528b94f
Show file tree
Hide file tree
Showing 6 changed files with 779 additions and 20 deletions.
74 changes: 73 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ Where:

`path` - Files or directory to transform.


For more information on jscodeshift, check their official [docs](https://github.com/facebook/jscodeshift).

## Transforms
Expand All @@ -49,3 +48,76 @@ module.exports = {
create: function(context) { ... }
};
```

### v9-rule-migration

Transform that migrates an ESLint rule definition from the old Rule API:

```javascript
module.exports = {
create(context) {
return {
Program(node) {
const sourceCode = context.getSourceCode();
const cwd = context.getCwd();
const filename = context.getFilename();
const physicalFilename = context.getPhysicalFilename();
const sourceCodeText = context.getSource();
const sourceLines = context.getSourceLines();
const allComments = context.getAllComments();
const nodeByRangeIndex = context.getNodeByRangeIndex();
const commentsBefore = context.getCommentsBefore(node);
const commentsAfter = context.getCommentsAfter(node);
const commentsInside = context.getCommentsInside(node);
const jsDocComment = context.getJSDocComment();
const firstToken = context.getFirstToken(node);
const firstTokens = context.getFirstTokens(node);
const lastToken = context.getLastToken(node);
const lastTokens = context.getLastTokens(node);
const tokenAfter = context.getTokenAfter(node);
const tokenBefore = context.getTokenBefore(node);
const tokenByRangeStart = context.getTokenByRangeStart(node);
const getTokens = context.getTokens(node);
const tokensAfter = context.getTokensAfter(node);
const tokensBefore = context.getTokensBefore(node);
const tokensBetween = context.getTokensBetween(node);
const parserServices = context.parserServices;
},
};
},
};
```

to the new [Rule API introduced in ESLint 9.0.0](https://eslint.org/blog/2023/09/preparing-custom-rules-eslint-v9/):

```javascript
module.exports = {
create(context) {
const sourceCode = context.sourceCode ?? context.getSourceCode();
return {
Program(node) {
const sourceCodeText = sourceCode.getText();
const sourceLines = sourceCode.getLines();
const allComments = sourceCode.getAllComments();
const nodeByRangeIndex = sourceCode.getNodeByRangeIndex();
const commentsBefore = sourceCode.getCommentsBefore(nodeOrToken);
const commentsAfter = sourceCode.getCommentsAfter(nodeOrToken);
const commentsInside = sourceCode.getCommentsInside(nodeOrToken);
const jsDocComment = sourceCode.getJSDocComment();
const firstToken = sourceCode.getFirstToken(node);
const firstTokens = sourceCode.getFirstTokens(node);
const lastToken = sourceCode.getLastToken(node);
const lastTokens = sourceCode.getLastTokens(node);
const tokenAfter = sourceCode.getTokenAfter(node);
const tokenBefore = sourceCode.getTokenBefore(node);
const tokenByRangeStart = sourceCode.getTokenByRangeStart(node);
const getTokens = sourceCode.getTokens(node);
const tokensAfter = sourceCode.getTokensAfter(node);
const tokensBefore = sourceCode.getTokensBefore(node);
const tokensBetween = sourceCode.getTokensBetween(node);
const parserServices = sourceCode.parserServices;
},
};
},
};
```
Loading

0 comments on commit 528b94f

Please sign in to comment.