Skip to content

Commit 4da12a9

Browse files
authored
fix: use source code to get combined jsx value (#218)
1 parent 624628d commit 4da12a9

File tree

8 files changed

+599
-1394
lines changed

8 files changed

+599
-1394
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@
66
coverage
77
lib
88
node_modules
9+
/test.mdx

package.json

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@
2424
"prelint": "yarn build",
2525
"pretest": "yarn clean",
2626
"test": "ts-node --skip-ignore node_modules/.bin/jest",
27-
"type-coverage": "type-coverage --cache --detail --ignore-catch --ignore-files '**/*.d.ts' --strict"
27+
"type-coverage": "type-coverage --cache --detail --ignore-catch --ignore-files '**/*.d.ts' --strict --update"
2828
},
2929
"devDependencies": {
3030
"@1stg/lib-config": "^0.5.5",
31-
"@1stg/tslint-config": "^0.8.4",
31+
"@1stg/tslint-config": "^0.8.5",
3232
"@types/eslint": "^7.2.0",
33-
"@types/jest": "^26.0.3",
34-
"@types/node": "^14.0.14",
35-
"@types/react": "^16.9.41",
33+
"@types/jest": "^26.0.4",
34+
"@types/node": "^14.0.22",
35+
"@types/react": "^16.9.43",
3636
"@types/rebass": "^4.0.6",
3737
"@types/unist": "^2.0.3",
3838
"cosmiconfig": "^6.0.0",
@@ -44,9 +44,12 @@
4444
"ts-jest": "^26.1.1",
4545
"ts-node": "^8.10.2",
4646
"tslint": "^6.1.2",
47-
"type-coverage": "^2.8.3",
48-
"typescript": "^3.9.5",
49-
"yarn-deduplicate": "^2.0.0"
47+
"type-coverage": "^2.8.4",
48+
"typescript": "^3.9.6",
49+
"yarn-deduplicate": "^2.1.0"
50+
},
51+
"resolutions": {
52+
"prettier": "^2.0.5"
5053
},
5154
"commitlint": {
5255
"extends": [
@@ -84,6 +87,6 @@
8487
]
8588
},
8689
"typeCoverage": {
87-
"atLeast": 99
90+
"atLeast": 97.96
8891
}
8992
}

packages/eslint-mdx/src/parser.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ export class Parser {
178178

179179
if (isMdx) {
180180
traverse(root, {
181+
code,
181182
enter: (node, parent) => {
182183
if (!ES_NODE_TYPES.includes(node.type)) {
183184
return

packages/eslint-mdx/src/traverse.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,23 @@ import {
1010
import { Node, Parent, TraverseOptions, Traverser } from './types'
1111

1212
export class Traverse {
13+
code: string
14+
1315
// @internal
1416
private readonly _enter: Traverser
1517

16-
constructor({ enter }: TraverseOptions) {
18+
constructor({ code, enter }: TraverseOptions) {
19+
this.code = code
1720
this._enter = enter
1821
}
1922

2023
combineLeftJsxNodes(jsxNodes: Node[]) {
24+
const start = jsxNodes[0].position.start
25+
const end = last(jsxNodes).position.end
2126
return {
2227
type: 'jsx',
2328
data: jsxNodes[0].data,
24-
value: jsxNodes.reduce((acc, { value }) => (acc += value), ''),
29+
value: this.code.slice(start.offset, end.offset),
2530
position: {
2631
start: jsxNodes[0].position.start,
2732
end: last(jsxNodes).position.end,

packages/eslint-mdx/src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ export interface ParserOptions extends Linter.ParserOptions {
4545
export type Traverser = (node: Node, parent?: Parent) => void
4646

4747
export interface TraverseOptions {
48+
code: string
4849
enter: Traverser
4950
}
5051

test/no-unescaped-entities.test.ts

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { DEFAULT_PARSER_OPTIONS as parserOptions } from 'eslint-mdx'
21
import { noUnescapedEntities } from 'eslint-plugin-mdx'
32

43
import { parser, ruleTester } from './helper'
@@ -10,13 +9,11 @@ ruleTester.run('no-unescaped-entities', noUnescapedEntities, {
109
{
1110
code: '<header> &apos; </header>',
1211
parser,
13-
parserOptions,
1412
filename,
1513
},
1614
{
1715
code: `# Title\n\n## Header <header> &apos; </header>\nMain<main></main>`,
1816
parser,
19-
parserOptions,
2017
filename,
2118
},
2219
{
@@ -25,15 +22,33 @@ ruleTester.run('no-unescaped-entities', noUnescapedEntities, {
2522
<Aside>I chose this video to test my theme. I did this to myself</Aside>
2623
`,
2724
parser,
28-
parserOptions,
25+
filename,
26+
},
27+
{
28+
// #217
29+
code: `<div style={{ color: 'white', backgroundColor: 'black', padding: '24px 32px' }}>
30+
31+
<a
32+
style={{
33+
color: 'white',
34+
textDecoration: 'none',
35+
fontWeight: 'bold',
36+
fontSize: 32
37+
}}
38+
href="https://blacklivesmatters.carrd.co/"
39+
>
40+
#BlackLivesMatter &rarr;
41+
</a>
42+
43+
</div>`,
44+
parser,
2945
filename,
3046
},
3147
],
3248
invalid: [
3349
{
3450
code: '<main> > </main>',
3551
parser,
36-
parserOptions,
3752
filename,
3853
errors: [
3954
{
@@ -44,7 +59,6 @@ ruleTester.run('no-unescaped-entities', noUnescapedEntities, {
4459
{
4560
code: '<main>\n<section> > </section></main>',
4661
parser,
47-
parserOptions,
4862
filename,
4963
errors: [
5064
{
@@ -55,7 +69,6 @@ ruleTester.run('no-unescaped-entities', noUnescapedEntities, {
5569
{
5670
code: 'Main <main> & </main>',
5771
parser,
58-
parserOptions,
5972
options: [
6073
{
6174
forbid: ['&'],

tsconfig.base.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"extends": "@1stg/tsconfig/lib",
2+
"extends": "@1stg/tsconfig/lib.json",
33
"compilerOptions": {
44
"strictFunctionTypes": false,
55
"strictNullChecks": false

0 commit comments

Comments
 (0)