emacs/test/lisp/progmodes/js-resources/jsx.jsx

315 lines
6.1 KiB
JavaScript
Raw Permalink 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.

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>
);
return (
<div attribute={{
a: 1, // Indent relative to “attribute” column.
b: 2
} && { // Dedent to “attribute” column.
a: 1,
b: 2
}} /> // Also dedent.
);
return (
<div attribute=
{ // Indent properly on another line, too.
{
a: 1,
b: 2,
} && (
// Indent other forms, too.
a ? b :
c ? d :
e
)
} />
)
// JSXMemberExpression names are parsed/indented:
<Foo.Bar>
<div>
<Foo.Bar>
Hello World!
</Foo.Bar>
<Foo.Bar>
<div>
</div>
</Foo.Bar>
</div>
</Foo.Bar>
// JSXOpeningFragment and JSXClosingFragment are parsed/indented:
<>
<div>
<>
Hello World!
</>
<>
<div>
</div>
</>
</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).
//
// In the referenced issue, the user actually wanted indentation which
// was simply different than Emacs SGML attribute indentation.
// Nevertheless, his issue highlighted our inability to properly
// indent code with JSX inside JSXExpressionContainers inside JSX.
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: