Skip to content

jsx/jsx-closing-tag-location

Enforce the closing tag location for multiline JSX elements.

Rule Details

This rule checks all JSX multiline elements with children (non-self-closing) and verifies the location of the closing tag. The expectation is that the closing tag is aligned with the opening tag on its own line.

Examples of incorrect code for this rule:

jsx
<Hello>
  marklar
  </Hello>
jsx
<Hello>
  marklar</Hello>

Examples of correct code for this rule:

jsx
<Hello>
  marklar
</Hello>
jsx
<Hello>marklar</Hello>

Rule Options

There is one way to configure this rule.

The first form is a string shortcut corresponding to the location values specified below. If omitted, it defaults to "tag-aligned".

json
{
  "@stylistic/jsx/jsx-closing-tag-location": ["error", "tag-aligned"]
}

location

Enforced location for the closing tag.

  • tag-aligned: must be aligned with the opening tag.
  • line-aligned: must be aligned with the line containing the opening tag.

Defaults to tag-aligned.

Examples of incorrect code for this rule:

jsx
// 'jsx-closing-tag-location': 1
// 'jsx-closing-tag-location': [1, 'tag-aligned']
<Say
  firstName="John"
  lastName="Smith">
  Hello
  </Say>;

// 'jsx-closing-tag-location': [1, 'tag-aligned']
const App = <Bar>
  Foo
</Bar>;

// 'jsx-closing-tag-location': [1, 'line-aligned']
const App = <Bar>
  Foo
            </Bar>;

Examples of correct code for this rule:

jsx
// 'jsx-closing-tag-location': 1
// 'jsx-closing-tag-location': [1, 'tag-aligned']
<Say
  firstName="John"
  lastName="Smith">
  Hello
</Say>;

// 'jsx-closing-tag-location': [1, 'tag-aligned']
const App = <Bar>
  Foo
            </Bar>;

// 'jsx-closing-tag-location': [1, 'line-aligned']
const App = <Bar>
  Foo
</Bar>;

When Not To Use It

If you do not care about closing tag JSX alignment then you can disable this rule.

Released under the MIT License.