diff options
author | Daniel Jasper <djasper@google.com> | 2012-12-21 17:58:39 +0000 |
---|---|---|
committer | Daniel Jasper <djasper@google.com> | 2012-12-21 17:58:39 +0000 |
commit | cd1a32b1f02016fe5ebb1142aadccc54bbdf5d89 (patch) | |
tree | 600d9bf0754ff59ecde7103325492aae7c5e48c4 /lib/Format/Format.cpp | |
parent | ab13751d76be4473e9317d3885cb351b79f18492 (diff) |
clang-format: No spaces around directory specifiers
This fixes PR14683. We used to format like this:
#include <a / b>
And this patch changes this to:
#include <a/b>
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@170910 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Format/Format.cpp')
-rw-r--r-- | lib/Format/Format.cpp | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index 6983f73499..b5e4a7003d 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -42,6 +42,7 @@ struct TokenAnnotation { TT_CtorInitializerColon, TT_LineComment, TT_BlockComment, + TT_DirectorySeparator, TT_ObjCMethodSpecifier }; @@ -560,7 +561,36 @@ public: } } + void parseIncludeDirective() { + while (Index < Tokens.size()) { + if (Tokens[Index].Tok.is(tok::slash)) + Annotations[Index].Type = TokenAnnotation::TT_DirectorySeparator; + else if (Tokens[Index].Tok.is(tok::less)) + Annotations[Index].Type = TokenAnnotation::TT_TemplateOpener; + else if (Tokens[Index].Tok.is(tok::greater)) + Annotations[Index].Type = TokenAnnotation::TT_TemplateCloser; + next(); + } + } + + void parsePreprocessorDirective() { + next(); + if (Index >= Tokens.size()) + return; + switch (Tokens[Index].Tok.getIdentifierInfo()->getPPKeywordID()) { + case tok::pp_include: + parseIncludeDirective(); + break; + default: + break; + } + } + void parseLine() { + if (Tokens[Index].Tok.is(tok::hash)) { + parsePreprocessorDirective(); + return; + } while (Index < Tokens.size()) { consumeToken(); } @@ -639,6 +669,10 @@ public: else Annotation.SpaceRequiredBefore = false; } else if ( + Annotation.Type == TokenAnnotation::TT_DirectorySeparator || + Annotations[i - 1].Type == TokenAnnotation::TT_DirectorySeparator) { + Annotation.SpaceRequiredBefore = false; + } else if ( Annotation.Type == TokenAnnotation::TT_BinaryOperator || Annotations[i - 1].Type == TokenAnnotation::TT_BinaryOperator) { Annotation.SpaceRequiredBefore = true; @@ -714,7 +748,7 @@ private: } bool isBinaryOperator(const FormatToken &Tok) { - // Comma is a binary operator, but does not behave a such wrt. formatting. + // Comma is a binary operator, but does not behave as such wrt. formatting. return getBinOpPrecedence(Tok.Tok.getKind(), true, true) > prec::Comma; } @@ -865,7 +899,8 @@ public: } if (FormatTok.Tok.is(tok::raw_identifier)) { - const IdentifierInfo &Info = IdentTable.get(tokenText(FormatTok.Tok)); + IdentifierInfo &Info = IdentTable.get(tokenText(FormatTok.Tok)); + FormatTok.Tok.setIdentifierInfo(&Info); FormatTok.Tok.setKind(Info.getTokenID()); } |