Skip to content

Commit 5052eb8

Browse files
authored
feat: use processor to display remark reports directly (#281)
1 parent 171488e commit 5052eb8

File tree

14 files changed

+139
-26
lines changed

14 files changed

+139
-26
lines changed

.eslintrc.js

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
const tsNode = require('ts-node')
22

3-
tsNode.register({
4-
compilerOptions: {
5-
module: 'commonjs',
6-
pretty: true,
7-
},
8-
transpileOnly: true,
9-
})
3+
tsNode.register()
104

115
module.exports = {
126
root: true,

package.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,13 @@
7575
"prettier": "@1stg/prettier-config",
7676
"remarkConfig": {
7777
"plugins": [
78-
"@1stg/remark-config"
78+
"@1stg/remark-config",
79+
[
80+
"lint-no-duplicate-headings",
81+
[
82+
2
83+
]
84+
]
7985
]
8086
},
8187
"renovate": {
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
export const base = {
1+
import { Linter } from 'eslint'
2+
3+
export const base: Linter.Config = {
24
parser: 'eslint-mdx',
35
plugins: ['mdx'],
6+
processor: 'mdx/remark',
47
}

packages/eslint-plugin-mdx/src/configs/overrides.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { Linter } from 'eslint'
2+
13
import { base } from './base'
24
import { getGlobals } from './helper'
35

@@ -12,7 +14,7 @@ try {
1214
rebass = ['Box', 'Flex', 'Text', 'Heading', 'Link', 'Button', 'Image', 'Card']
1315
}
1416

15-
export const overrides = {
17+
export const overrides: Linter.Config = {
1618
...base,
1719
globals: getGlobals(rebass, {
1820
React: false,

packages/eslint-plugin-mdx/src/configs/recommended.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1+
import { Linter } from 'eslint'
12
import { version } from 'eslint/package.json'
23

34
import { base } from './base'
45

56
const minorVersion = +version.split('.').slice(0, 2).join('.')
67

7-
export const recommended = {
8+
export const recommended: Linter.Config = {
89
...base,
910
rules: {
1011
'mdx/no-jsx-html-comments': 2,
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export * as configs from './configs'
22

33
export * from './configs/helper'
4+
export * from './processors'
45
export * from './rules'
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { remark } from './remark'
2+
3+
// related to https://github.com/benmosher/eslint-plugin-import/issues/2002
4+
export const processors = { remark }
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { Linter } from 'eslint'
2+
3+
import { RemarkLintMessage } from '../rules'
4+
5+
export const remark = {
6+
postprocess(lintMessages: Linter.LintMessage[][]): Linter.LintMessage[] {
7+
const messages: Linter.LintMessage[] = []
8+
for (const lintMessageList of lintMessages) {
9+
messages.push(
10+
...lintMessageList.map(lintMessage => {
11+
const {
12+
message,
13+
ruleId: eslintRuleId,
14+
severity: eslintSeverity,
15+
} = lintMessage
16+
if (eslintRuleId !== 'mdx/remark') {
17+
return lintMessage
18+
}
19+
20+
const { source, ruleId, reason, severity } = JSON.parse(
21+
message,
22+
) as RemarkLintMessage
23+
24+
return {
25+
...lintMessage,
26+
ruleId: `${source}-${ruleId}`,
27+
message: reason,
28+
severity: Math.max(eslintSeverity, severity) as Linter.Severity,
29+
}
30+
}),
31+
)
32+
}
33+
return messages
34+
},
35+
supportsAutofix: true,
36+
}

packages/eslint-plugin-mdx/src/rules/remark.ts

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { DEFAULT_EXTENSIONS, MARKDOWN_EXTENSIONS } from 'eslint-mdx'
55
import vfile from 'vfile'
66

77
import { getRemarkProcessor } from './helper'
8+
import { RemarkLintMessage } from './types'
89

910
export const remark: Rule.RuleModule = {
1011
meta: {
@@ -14,9 +15,6 @@ export const remark: Rule.RuleModule = {
1415
category: 'Stylistic Issues',
1516
recommended: true,
1617
},
17-
messages: {
18-
remarkReport: '{{ source }}:{{ ruleId }} - {{ reason }}',
19-
},
2018
fixable: 'code',
2119
},
2220
create(context) {
@@ -34,6 +32,7 @@ export const remark: Rule.RuleModule = {
3432
options.markdownExtensions || [],
3533
).includes(extname)
3634
return {
35+
// eslint-disable-next-line sonarjs/cognitive-complexity
3736
Program(node) {
3837
/* istanbul ignore if */
3938
if (!isMdx && !isMarkdown) {
@@ -59,15 +58,26 @@ export const remark: Rule.RuleModule = {
5958
source,
6059
reason,
6160
ruleId,
61+
fatal,
6262
location: { start, end },
6363
} of file.messages) {
64+
// https://github.com/remarkjs/remark-lint/issues/65#issuecomment-220800231
65+
/* istanbul ignore next */
66+
const severity = fatal ? 2 : fatal == null ? 0 : 1
67+
/* istanbul ignore if */
68+
if (!severity) {
69+
// should never happen, just for robustness
70+
continue
71+
}
72+
const message: RemarkLintMessage = {
73+
reason,
74+
source,
75+
ruleId,
76+
severity,
77+
}
6478
context.report({
65-
messageId: 'remarkReport',
66-
data: {
67-
reason,
68-
source,
69-
ruleId,
70-
},
79+
// related to https://github.com/eslint/eslint/issues/14198
80+
message: JSON.stringify(message),
7181
loc: {
7282
// ! eslint ast column is 0-indexed, but unified is 1-indexed
7383
start: {

packages/eslint-plugin-mdx/src/rules/types.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { Linter } from 'eslint'
12
// eslint-disable-next-line node/no-extraneous-import
23
import { ExpressionStatement, Node } from 'estree'
34
import { Attacher } from 'unified'
@@ -18,3 +19,10 @@ export interface RemarkConfig {
1819
settings: Record<string, string>
1920
plugins: Array<RemarkPlugin | [RemarkPlugin, ...unknown[]]>
2021
}
22+
23+
export interface RemarkLintMessage {
24+
reason: string
25+
source: string
26+
ruleId: string
27+
severity: Linter.Severity
28+
}

0 commit comments

Comments
 (0)