Add a printing policy flag to suppress printing "<anonymous>::" prior
to types. Enable this flag for code completion, where knowing whether something is in an anonymous or inline namespace is actually not useful, since you don't have to type it anyway. Fixes <rdar://problem/10208818>. llvm-svn: 143599
This commit is contained in:
		
							parent
							
								
									9589872af9
								
							
						
					
					
						commit
						2e10cf9620
					
				| 
						 | 
					@ -36,7 +36,7 @@ struct PrintingPolicy {
 | 
				
			||||||
  PrintingPolicy(const LangOptions &LO)
 | 
					  PrintingPolicy(const LangOptions &LO)
 | 
				
			||||||
    : Indentation(2), LangOpts(LO), SuppressSpecifiers(false),
 | 
					    : Indentation(2), LangOpts(LO), SuppressSpecifiers(false),
 | 
				
			||||||
      SuppressTagKeyword(false), SuppressTag(false), SuppressScope(false),
 | 
					      SuppressTagKeyword(false), SuppressTag(false), SuppressScope(false),
 | 
				
			||||||
      SuppressInitializers(false),
 | 
					      SuppressUnwrittenScope(false), SuppressInitializers(false),
 | 
				
			||||||
      Dump(false), ConstantArraySizeAsWritten(false),
 | 
					      Dump(false), ConstantArraySizeAsWritten(false),
 | 
				
			||||||
      AnonymousTagLocations(true), SuppressStrongLifetime(false),
 | 
					      AnonymousTagLocations(true), SuppressStrongLifetime(false),
 | 
				
			||||||
      Bool(LO.Bool) { }
 | 
					      Bool(LO.Bool) { }
 | 
				
			||||||
| 
						 | 
					@ -86,6 +86,10 @@ struct PrintingPolicy {
 | 
				
			||||||
  /// \brief Suppresses printing of scope specifiers.
 | 
					  /// \brief Suppresses printing of scope specifiers.
 | 
				
			||||||
  bool SuppressScope : 1;
 | 
					  bool SuppressScope : 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// \brief Suppress printing parts of scope specifiers that don't need
 | 
				
			||||||
 | 
					  /// to be written, e.g., for inline or anonymous namespaces.
 | 
				
			||||||
 | 
					  bool SuppressUnwrittenScope : 1;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
  /// \brief Suppress printing of variable initializers.
 | 
					  /// \brief Suppress printing of variable initializers.
 | 
				
			||||||
  ///
 | 
					  ///
 | 
				
			||||||
  /// This flag is used when printing the loop variable in a for-range
 | 
					  /// This flag is used when printing the loop variable in a for-range
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -229,6 +229,9 @@ NestedNameSpecifier::print(raw_ostream &OS,
 | 
				
			||||||
    break;
 | 
					    break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  case Namespace:
 | 
					  case Namespace:
 | 
				
			||||||
 | 
					    if (getAsNamespace()->isAnonymousNamespace())
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
    OS << getAsNamespace()->getName();
 | 
					    OS << getAsNamespace()->getName();
 | 
				
			||||||
    break;
 | 
					    break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -600,6 +600,9 @@ void TypePrinter::AppendScope(DeclContext *DC, std::string &Buffer) {
 | 
				
			||||||
  unsigned OldSize = Buffer.size();
 | 
					  unsigned OldSize = Buffer.size();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (NamespaceDecl *NS = dyn_cast<NamespaceDecl>(DC)) {
 | 
					  if (NamespaceDecl *NS = dyn_cast<NamespaceDecl>(DC)) {
 | 
				
			||||||
 | 
					    if (Policy.SuppressUnwrittenScope && 
 | 
				
			||||||
 | 
					        (NS->isAnonymousNamespace() || NS->isInline()))
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
    if (NS->getIdentifier())
 | 
					    if (NS->getIdentifier())
 | 
				
			||||||
      Buffer += NS->getNameAsString();
 | 
					      Buffer += NS->getNameAsString();
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
| 
						 | 
					@ -620,6 +623,8 @@ void TypePrinter::AppendScope(DeclContext *DC, std::string &Buffer) {
 | 
				
			||||||
      Buffer += Typedef->getIdentifier()->getName();
 | 
					      Buffer += Typedef->getIdentifier()->getName();
 | 
				
			||||||
    else if (Tag->getIdentifier())
 | 
					    else if (Tag->getIdentifier())
 | 
				
			||||||
      Buffer += Tag->getIdentifier()->getName();
 | 
					      Buffer += Tag->getIdentifier()->getName();
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (Buffer.size() != OldSize)
 | 
					  if (Buffer.size() != OldSize)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1381,6 +1381,7 @@ static PrintingPolicy getCompletionPrintingPolicy(Sema &S) {
 | 
				
			||||||
  PrintingPolicy Policy = S.getPrintingPolicy();
 | 
					  PrintingPolicy Policy = S.getPrintingPolicy();
 | 
				
			||||||
  Policy.AnonymousTagLocations = false;
 | 
					  Policy.AnonymousTagLocations = false;
 | 
				
			||||||
  Policy.SuppressStrongLifetime = true;
 | 
					  Policy.SuppressStrongLifetime = true;
 | 
				
			||||||
 | 
					  Policy.SuppressUnwrittenScope = true;
 | 
				
			||||||
  return Policy;
 | 
					  return Policy;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,3 +1,4 @@
 | 
				
			||||||
 | 
					namespace {
 | 
				
			||||||
class MyCls {
 | 
					class MyCls {
 | 
				
			||||||
  void in_foo() {
 | 
					  void in_foo() {
 | 
				
			||||||
    vec.x = 0;
 | 
					    vec.x = 0;
 | 
				
			||||||
| 
						 | 
					@ -20,9 +21,10 @@ private:
 | 
				
			||||||
  int value;
 | 
					  int value;
 | 
				
			||||||
  MyCls *object;
 | 
					  MyCls *object;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RUN: c-index-test -code-completion-at=%s:3:9 %s | FileCheck %s
 | 
					// RUN: c-index-test -code-completion-at=%s:4:9 %s | FileCheck %s
 | 
				
			||||||
// RUN: c-index-test -code-completion-at=%s:12:7 %s | FileCheck %s
 | 
					// RUN: c-index-test -code-completion-at=%s:13:7 %s | FileCheck %s
 | 
				
			||||||
// CHECK:      CXXMethod:{ResultType MyCls::Vec &}{TypedText operator=}{LeftParen (}{Placeholder const MyCls::Vec &}{RightParen )} (34)
 | 
					// CHECK:      CXXMethod:{ResultType MyCls::Vec &}{TypedText operator=}{LeftParen (}{Placeholder const MyCls::Vec &}{RightParen )} (34)
 | 
				
			||||||
// CHECK-NEXT: StructDecl:{TypedText Vec}{Text ::} (75)
 | 
					// CHECK-NEXT: StructDecl:{TypedText Vec}{Text ::} (75)
 | 
				
			||||||
// CHECK-NEXT: FieldDecl:{ResultType int}{TypedText x} (35)
 | 
					// CHECK-NEXT: FieldDecl:{ResultType int}{TypedText x} (35)
 | 
				
			||||||
| 
						 | 
					@ -32,11 +34,11 @@ private:
 | 
				
			||||||
// CHECK-NEXT: Dot member access
 | 
					// CHECK-NEXT: Dot member access
 | 
				
			||||||
// CHECK-NEXT: Container Kind: StructDecl
 | 
					// CHECK-NEXT: Container Kind: StructDecl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RUN: c-index-test -code-completion-at=%s:17:41 %s | FileCheck -check-prefix=CHECK-CTOR-INIT %s
 | 
					// RUN: c-index-test -code-completion-at=%s:18:41 %s | FileCheck -check-prefix=CHECK-CTOR-INIT %s
 | 
				
			||||||
// CHECK-CTOR-INIT: NotImplemented:{TypedText MyCls}{LeftParen (}{Placeholder args}{RightParen )} (7)
 | 
					// CHECK-CTOR-INIT: NotImplemented:{TypedText MyCls}{LeftParen (}{Placeholder args}{RightParen )} (7)
 | 
				
			||||||
// CHECK-CTOR-INIT: MemberRef:{TypedText object}{LeftParen (}{Placeholder args}{RightParen )} (35)
 | 
					// CHECK-CTOR-INIT: MemberRef:{TypedText object}{LeftParen (}{Placeholder args}{RightParen )} (35)
 | 
				
			||||||
// CHECK-CTOR-INIT: MemberRef:{TypedText value}{LeftParen (}{Placeholder args}{RightParen )} (35)
 | 
					// CHECK-CTOR-INIT: MemberRef:{TypedText value}{LeftParen (}{Placeholder args}{RightParen )} (35)
 | 
				
			||||||
// RUN: c-index-test -code-completion-at=%s:17:55 %s | FileCheck -check-prefix=CHECK-CTOR-INIT-2 %s
 | 
					// RUN: c-index-test -code-completion-at=%s:18:55 %s | FileCheck -check-prefix=CHECK-CTOR-INIT-2 %s
 | 
				
			||||||
// CHECK-CTOR-INIT-2-NOT: NotImplemented:{TypedText MyCls}{LeftParen (}{Placeholder args}{RightParen )}
 | 
					// CHECK-CTOR-INIT-2-NOT: NotImplemented:{TypedText MyCls}{LeftParen (}{Placeholder args}{RightParen )}
 | 
				
			||||||
// CHECK-CTOR-INIT-2: MemberRef:{TypedText object}{LeftParen (}{Placeholder args}{RightParen )} (35)
 | 
					// CHECK-CTOR-INIT-2: MemberRef:{TypedText object}{LeftParen (}{Placeholder args}{RightParen )} (35)
 | 
				
			||||||
// CHECK-CTOR-INIT-2: MemberRef:{TypedText value}{LeftParen (}{Placeholder args}{RightParen )} (7)
 | 
					// CHECK-CTOR-INIT-2: MemberRef:{TypedText value}{LeftParen (}{Placeholder args}{RightParen )} (7)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue