Skip to content

Commit

Permalink
Rename prefer-box-lonely-ref
Browse files Browse the repository at this point in the history
  • Loading branch information
AlbertCarreras committed Aug 17, 2021
1 parent cf233f1 commit be55a1c
Show file tree
Hide file tree
Showing 30 changed files with 524 additions and 207 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ import { Box as RenamedBox } from 'gestalt';
export default function TestElement() {
const ref = useRef(null);
return (
<Box>
<RenamedBox>
<div ref={ref}>
<Box />
<RenamedBox />
</div>
</Box>
</RenamedBox>
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ import { Box as RenamedBox } from 'gestalt';
export default function TestElement() {
const ref = useRef(null);
return (
<Box>
<Box ref={ref}>
<Box />
</Box>
</Box>
<RenamedBox>
<RenamedBox ref={ref}>
<RenamedBox />
</RenamedBox>
</RenamedBox>
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ export default function TestElement() {
const ref = useRef(null);
return (
<div ref={ref}>
<div />
<button />
</div>
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ export default function TestElement() {
const ref = useRef(null);
return (
<Box ref={ref}>
<div />
<button />
</Box>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Box } from 'gestalt';
export default function TestElement() {
return (
<Box>
<div role="button" style={{ marginTop: 200 }}>
<Box />
</div>
</Box>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Box } from 'gestalt';
export default function TestElement() {
return (
<Box>
<Box role="button" dangerouslySetInlineStyle={{ __style: { marginTop: 200 } }}>
<Box />
</Box>
</Box>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Box } from 'gestalt';
export default function TestElement() {
return (
<Box>
<div role="button">
<Box />
</div>
</Box>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Box } from 'gestalt';
export default function TestElement() {
return (
<Box>
<Box role="button">
<Box />
</Box>
</Box>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Box as RenamedBox } from 'gestalt';
export default function TestElement() {
return (
<RenamedBox>
<div role="button">
<RenamedBox />
</div>
</RenamedBox>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Box as RenamedBox } from 'gestalt';
export default function TestElement() {
return (
<RenamedBox>
<RenamedBox role="button">
<RenamedBox />
</RenamedBox>
</RenamedBox>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { Text, Flex } from 'gestalt';
export default function TestElement() {
return (
<div role="button">
<Text>Test</Text>
</div>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { Box, Flex, Text } from 'gestalt';
export default function TestElement() {
return (
<Box role="button">
<Text>Test</Text>
</Box>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export default function TestElement() {
return (
<div role="button">
<button />
</div>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { Box } from 'gestalt';
export default function TestElement() {
return (
<Box role="button">
<button />
</Box>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export default function TestElement() {
return <div role="button" />;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { Box } from 'gestalt';
export default function TestElement() {
return <Box role="button" />;
}
22 changes: 17 additions & 5 deletions packages/eslint-plugin-gestalt/src/eslintASTFixers.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,9 @@ type RenameTagFixerType = ({|
context: GenericNode,
elementNode: GenericNode,
fixer: GenericNode,
gestaltImportNode: GenericNode,
newComponentName: string,
replaceRegexCallback?: ({| input: string |}) => string,
tagName: string,
|}) => $ReadOnlyArray<GenericNode>;

Expand All @@ -70,21 +72,31 @@ export const renameTagFixer: RenameTagFixerType = ({
context,
elementNode,
fixer,
gestaltImportNode,
newComponentName,
replaceRegexCallback = ({ input }) => input,
tagName,
}) => {
return [elementNode.openingElement, elementNode.closingElement]
.map((node) => {
// $FlowFixMe[incompatible-type] Flow is not detecting the method filter(Boolean)
if (!node) return false;
const namedImportsComponents =
getNamedImportsComponents({
importNode: gestaltImportNode,
}) ?? [];

return fixer.replaceText(
node,
getTextNodeFromSourceCode({ context, elementNode: node }).replace(
const componentNameMatch = namedImportsComponents.find(
(item) => item[0] === newComponentName,
);

const replacedText = replaceRegexCallback({
input: getTextNodeFromSourceCode({ context, elementNode: node }).replace(
tagName,
newComponentName,
(componentNameMatch && componentNameMatch[1]) ?? newComponentName,
),
);
});
return fixer.replaceText(node, replacedText);
})
.filter(Boolean);
};
Expand Down
14 changes: 14 additions & 0 deletions packages/eslint-plugin-gestalt/src/eslintASTHelpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -253,3 +253,17 @@ export const hasLonelyAttribute: HasLonelyAttributeType = ({ elementNode, tagNam
isTag({ elementNode, tagName }) &&
elementNode?.attributes?.length === 1 &&
elementNode.attributes[0]?.name?.name === attribute;

type HasAttributeType = ({|
elementNode: GenericNode,
tagName: string,
attribute: string,
|}) => boolean;

/** This function checks is a given tag (tagName) in a node (elementNode) contains a given attribute (attribute), and returns true if so.
Example 1:
\<div role="button" \/\> if attribute="role" returns true
*/
export const hasAttribute: HasAttributeType = ({ elementNode, tagName, attribute }) =>
isTag({ elementNode, tagName }) &&
elementNode?.attributes.some((nodeAttribute) => nodeAttribute?.name?.name === attribute);
4 changes: 2 additions & 2 deletions packages/eslint-plugin-gestalt/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import noMediumFormfields from './no-medium-formfields.js';
import noRoleLinkComponents from './no-role-link-components.js';
import noSpreadProps from './no-spread-props.js';
import preferBoxInlineStyle from './prefer-box-inline-style.js';
import preferBoxLonelyRef from './prefer-box-lonely-ref.js';
import preferBoxNoClassname from './prefer-box-no-classname.js';
import preferBoxAsTag from './prefer-box-as-tag.js';

module.exports = {
Expand All @@ -22,7 +22,7 @@ module.exports = {
'no-role-link-components': noRoleLinkComponents,
'no-spread-props': noSpreadProps,
'prefer-box-inline-style': preferBoxInlineStyle,
'prefer-box-lonely-ref': preferBoxLonelyRef,
'prefer-box-no-classname': preferBoxNoClassname,
'prefer-box-as-tag': preferBoxAsTag,
},
};
84 changes: 0 additions & 84 deletions packages/eslint-plugin-gestalt/src/prefer-box-lonely-ref.js

This file was deleted.

0 comments on commit be55a1c

Please sign in to comment.