emacs/test/manual/indent/js-jsx.js
Jackson Ray Hamilton 27e9bce77d
Add new (failing) unclosed JSX test and separate such tests
* test/manual/indent/js-jsx.js: Move test with intentional scan error to
its own file, js-jsx-unclosed-1.js.
* test/manual/indent/js-jsx-unclosed-1.js: New file.
* test/manual/indent/js-jsx-unclosed-2.js: New file with test for
regression caused by new ambiguous parsing of JS/JSX.
2019-04-08 22:48:20 -07:00

259 lines
5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// -*- mode: js-jsx; -*-
var foo = <div></div>;
return (
<div>
</div>
<div>
<div></div>
<div>
<div></div>
</div>
</div>
);
React.render(
<div>
<div></div>
</div>,
{
a: 1
},
<div>
<div></div>
</div>
);
return (
// Sneaky!
<div></div>
);
return (
<div></div>
// Sneaky!
);
React.render(
<input
/>,
{
a: 1
}
);
return (
<div>
{array.map(function () {
return {
a: 1
};
})}
</div>
);
return (
<div attribute={array.map(function () {
return {
a: 1
};
return {
a: 1
};
return {
a: 1
};
})}>
</div>
);
// Indent void expressions (no need for contextual parens / commas)
// (https://github.com/mooz/js2-mode/issues/140#issuecomment-166250016).
<div className="class-name">
<h2>Title</h2>
{array.map(() => {
return <Element />;
})}
{message}
</div>
// Another example of above issue
// (https://github.com/mooz/js2-mode/issues/490).
<App>
<div>
{variable1}
<Component/>
</div>
</App>
// Comments and arrows can break indentation (Bug#24896 /
// https://github.com/mooz/js2-mode/issues/389).
const Component = props => (
<FatArrow a={e => c}
b={123}>
</FatArrow>
);
const Component = props => (
<NoFatArrow a={123}
b={123}>
</NoFatArrow>
);
const Component = props => ( // Parse this comment, please.
<FatArrow a={e => c}
b={123}>
</FatArrow>
);
const Component = props => ( // Parse this comment, please.
<NoFatArrow a={123}
b={123}>
</NoFatArrow>
);
// Another example of above issue (Bug#30225).
class {
render() {
return (
<select style={{paddingRight: "10px"}}
onChange={e => this.setState({value: e.target.value})}
value={this.state.value}>
<option>Hi</option>
</select>
);
}
}
// JSX attributes of an arrow functions expression bodys JSX
// expression should be indented with respect to the JSX opening
// element (Bug#26001 /
// https://github.com/mooz/js2-mode/issues/389#issuecomment-271869380).
class {
render() {
const messages = this.state.messages.map(
message => <Message key={message.id}
text={message.text}
mine={message.mine} />
); return messages;
}
render() {
const messages = this.state.messages.map(message =>
<Message key={message.timestamp}
text={message.text}
mine={message.mine} />
); return messages;
}
}
// Users expect tag closers to align with the tags start; this is the
// style used in the React docs, so it should be the default.
// - https://github.com/mooz/js2-mode/issues/389#issuecomment-390766873
// - https://github.com/mooz/js2-mode/issues/482
// - Bug#32158
const foo = (props) => (
<div>
<input
cat={i => i}
/>
<button
className="square"
>
{this.state.value}
</button>
</div>
);
// Embedded JSX in parens breaks indentation
// (https://github.com/mooz/js2-mode/issues/411).
let a = (
<div>
{condition && <Component/>}
{condition && <Component/>}
<div/>
</div>
)
let b = (
<div>
{condition && (<Component/>)}
<div/>
</div>
)
let c = (
<div>
{condition && (<Component/>)}
{condition && "something"}
</div>
)
let d = (
<div>
{(<Component/>)}
{condition && "something"}
</div>
)
// Another example of the above issue (Bug#27000).
function testA() {
return (
<div>
<div> { ( <div/> ) } </div>
</div>
);
}
function testB() {
return (
<div>
<div> { <div/> } </div>
</div>
);
}
// Another example of the above issue
// (https://github.com/mooz/js2-mode/issues/451).
class Classy extends React.Component {
render () {
return (
<div>
<ul className="tocListRoot">
{ this.state.list.map((item) => {
return (<div />)
})}
</ul>
</div>
)
}
}
// Self-closing tags should be indented properly
// (https://github.com/mooz/js2-mode/issues/459).
export default ({ stars }) => (
<div className='overlay__container'>
<div className='overlay__header overlay--text'>
Congratulations!
</div>
<div className='overlay__reward'>
<Icon {...createIconProps(stars > 0)} size='large' />
<div className='overlay__reward__bottom'>
<Icon {...createIconProps(stars > 1)} size='small' />
<Icon {...createIconProps(stars > 2)} size='small' />
</div>
</div>
<div className='overlay__description overlay--text'>
You have created <large>1</large> reminder
</div>
</div>
)
// JS expressions should not break indentation
// (https://github.com/mooz/js2-mode/issues/462).
return (
<Router>
<Bar>
<Route exact path="/foo" render={() => (
<div>nothing</div>
)} />
<Route exact path="/bar" />
</Bar>
</Router>
)
// Local Variables:
// indent-tabs-mode: nil
// js-indent-level: 2
// End: