forked from OSchip/llvm-project
clang-format: [JS] strict prop init annotation.
Summary: TypeScript uses the `!` token for strict property initialization assertions, as in: class X { strictPropAsserted!: string; } Previously, clang-format would wrap between the `!` and the `:` for overly long lines. This patch fixes that by generally preventing the wrap in that location. Reviewers: krasimir Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D48030 llvm-svn: 334415
This commit is contained in:
parent
5434047862
commit
c8b7a41a00
|
@ -2981,7 +2981,7 @@ bool TokenAnnotator::mustBreakBefore(const AnnotatedLine &Line,
|
|||
// We deal with this case later by detecting an entry
|
||||
// following a closing paren of this submessage.
|
||||
}
|
||||
|
||||
|
||||
// If this is an entry immediately following a submessage, it will be
|
||||
// preceded by a closing paren of that submessage, like in:
|
||||
// left---. .---right
|
||||
|
@ -3027,6 +3027,9 @@ bool TokenAnnotator::canBreakBefore(const AnnotatedLine &Line,
|
|||
return false;
|
||||
if (Left.is(TT_JsTypeColon))
|
||||
return true;
|
||||
// Don't wrap between ":" and "!" of a strict prop init ("field!: type;").
|
||||
if (Left.is(tok::exclaim) && Right.is(tok::colon))
|
||||
return false;
|
||||
if (Right.is(Keywords.kw_is))
|
||||
return false;
|
||||
if (Left.is(Keywords.kw_in))
|
||||
|
|
|
@ -1540,6 +1540,15 @@ TEST_F(FormatTestJS, ClassDeclarations) {
|
|||
"}");
|
||||
}
|
||||
|
||||
TEST_F(FormatTestJS, StrictPropInitWrap) {
|
||||
const FormatStyle &Style = getGoogleJSStyleWithColumns(22);
|
||||
verifyFormat("class X {\n"
|
||||
" strictPropInitField!:\n"
|
||||
" string;\n"
|
||||
"}",
|
||||
Style);
|
||||
}
|
||||
|
||||
TEST_F(FormatTestJS, InterfaceDeclarations) {
|
||||
verifyFormat("interface I {\n"
|
||||
" x: string;\n"
|
||||
|
|
Loading…
Reference in New Issue