react-doctor/styled-components-duplicate-css-property-in-block
Duplicate CSS property in styled block
- Category: Maintainability
- Severity: warn
- Source:
oxlint-plugin-react-doctor - Framework: global
- Enabled when: styled-components
- Tags: design
- Default: Disabled until configured
Validate the diagnostic
Confirm the reported code matches this rule before you edit it.
Confirm the reported code matches react-doctor/styled-components-duplicate-css-property-in-block. Compare it with the Before example and verify the same API, framework, and execution context. Treat it as a false positive only when one of those conditions differs.
Compare the code
The corrected pattern shows a focused way to address the diagnostic.
Reported pattern
import styled from "styled-components";
const Button = styled.button`
padding: ${(props) => props.compact ? "4px" : "8px"};
padding: ${(props) => props.large ? "16px" : "8px"};
`;Corrected pattern
import styled from "styled-components";
const Button = styled.button`
padding: ${(props) => {
if (props.compact) return "4px";
if (props.large) return "16px";
return "8px";
}};
`;How to fix
Use the corrected pattern as a reference. Preserve behavior that the rule does not require you to change.
Copyable fix prompt
Copy this self-contained prompt into your coding agent after you confirm the diagnostic.
Fix every confirmed
Reference transformation:Before:react-doctor/styled-components-duplicate-css-property-in-block diagnostic in the current repository.
Required change:
- Keep one declaration per CSS property in each styled block. Compute conditional values in that declaration.import styled from "styled-components";
const Button = styled.button`
padding: ${(props) => props.compact ? "4px" : "8px"};
padding: ${(props) => props.large ? "16px" : "8px"};
`;import styled from "styled-components";
const Button = styled.button`
padding: ${(props) => {
if (props.compact) return "4px";
if (props.large) return "16px";
return "8px";
}};
`;Constraints:
- Confirm the reported code matches the Before pattern.
- Make the smallest change that fixes the root cause.
- Preserve behavior and interfaces unrelated to this diagnostic.
- Reuse existing project components, utilities, and conventions.
- Do not introduce render-phase side effects, render-phase state updates, or Hooks rule violations.
- Use existing brand assets, product facts, content, and design tokens.
- Do not invent claims, customer data, typefaces, or artwork.
- Adapt identifiers and framework details instead of copying blindly.
- Do not disable the rule or suppress matching code.
- Confirm this rule is enabled for the project:
styled-components.
Verification:
- Run focused tests for the changed behavior.
- Run React Doctor and confirm this diagnostic no longer appears.
- Report the files changed and any checks you could not run.Related rules
More Maintainability rules from the rules reference:
react-doctor/zod-v4-no-deprecated-error-apis: Replace deprecated ZodError helpers with Zod 4 functions: z.treeifyError(), z.flattenError(), z.prettifyError(), or read error.issues directlyreact-doctor/zod-v4-no-deprecated-error-customization: Replace deprecated Zod error customization with the v4 unified { error } API: z.string({ error: "Required" })react-doctor/zod-v4-no-deprecated-schema-apis: Migrate deprecated Zod 4 schema APIs: z.object().strict() to z.strictObject(), z.nativeEnum to z.enum, z.record(value) to z.record(key, value), z.function().args().returns() to z.function({ input, output }).react-doctor/zod-v4-prefer-top-level-string-formats: Replace z.string().<format>() with the Zod 4 top-level format API, e.g. z.email() or z.uuid()react-doctor/design-no-em-dash-in-jsx-text: Replace em dashes in JSX prose with commas, colons, semicolons, or parentheses so UI copy reads less like generated text.