Skip to content

Rename SVG Attribute Has Fix

Description

SVG(Scalable Vector Graphics)s' hyphenated names are not compatible with JSX syntax in React. JSX requires camelCase naming for attributes. For example, an SVG attribute like stroke-linecap needs to be renamed to strokeLinecap to work correctly in React.

YAML

yaml
id: rewrite-svg-attribute
language: tsx
rule:
  pattern: $PROP            # capture in metavar
  regex: ([a-z]+)-([a-z])   # hyphenated name
  kind: property_identifier
  inside:
    kind: jsx_attribute     # in JSX attribute
transform:
  NEW_PROP:                 # new property name
    convert:                # use ast-grep's convert
      source: $PROP
      toCase: camelCase     # to camelCase naming
fix: $NEW_PROP

Example

tsx
const element = (
  <svg width="100" height="100" viewBox="0 0 100 100">
    <path d="M10 20 L30 40" stroke-linecap="round" fill-opacity="0.5" />
  </svg>
)

Diff

ts
const element = (
  <svg width="100" height="100" viewBox="0 0 100 100">
    <path d="M10 20 L30 40" stroke-linecap="round" fill-opacity="0.5" />
    <path d="M10 20 L30 40" strokeLinecap="round" fillOpacity="0.5" />
  </svg>
)

Contributed by

Inspired by SVG Renamer

Made with ❤️ with Rust