BfSourceClassifier.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. #pragma once
  2. #include "BeefySysLib/Common.h"
  3. #include "BfAst.h"
  4. #include "BfSystem.h"
  5. #include "BfElementVisitor.h"
  6. NS_BF_BEGIN
  7. enum BfSourceElementType
  8. {
  9. BfSourceElementType_Normal,
  10. BfSourceElementType_Keyword,
  11. BfSourceElementType_Literal,
  12. BfSourceElementType_Comment,
  13. BfSourceElementType_Identifier,
  14. BfSourceElementType_Local,
  15. BfSourceElementType_Parameter,
  16. BfSourceElementType_Member,
  17. BfSourceElementType_Method,
  18. BfSourceElementType_Type,
  19. BfSourceElementType_PrimitiveType,
  20. BfSourceElementType_Struct,
  21. BfSourceElementType_GenericParam,
  22. BfSourceElementType_RefType,
  23. BfSourceElementType_Interface,
  24. BfSourceElementType_Namespace
  25. };
  26. enum BfSourceElementFlags
  27. {
  28. BfSourceElementFlag_Error = 1,
  29. BfSourceElementFlag_Warning = 2,
  30. BfSourceElementFlag_IsAfter = 4,
  31. BfSourceElementFlag_Skipped = 8,
  32. BfSourceElementFlag_CompilerFlags_Mask = 0x0F,
  33. BfSourceElementFlag_MASK = 0xFF
  34. };
  35. enum BfSourceDisplayId : uint8
  36. {
  37. BfSourceDisplayId_Cleared,
  38. BfSourceDisplayId_AutoComplete,
  39. BfSourceDisplayId_SpellCheck,
  40. BfSourceDisplayId_FullClassify,
  41. BfSourceDisplayId_SkipResult
  42. };
  43. class BfSourceClassifier : public BfElementVisitor
  44. {
  45. public:
  46. struct CharData
  47. {
  48. char mChar;
  49. uint8 mDisplayPassId;
  50. uint8 mDisplayTypeId;
  51. uint8 mDisplayFlags;
  52. #ifdef INCLUDE_CHARDATA_CHARID
  53. uint32 mCharId; // Unique ID for each character, for tracking moving text
  54. #endif
  55. };
  56. public:
  57. BfParser* mParser;
  58. CharData* mCharData;
  59. bool mEnabled;
  60. bool mSkipMethodInternals;
  61. bool mSkipTypeDeclarations;
  62. bool mSkipAttributes;
  63. bool mIsSideChannel;
  64. bool mPreserveFlags;
  65. bool mSkipAnonymousTypes;
  66. uint8 mClassifierPassId;
  67. BfAstNode* mPrevNode;
  68. BfAstNode* mCurMember;
  69. BfLocalMethodDeclaration* mCurLocalMethodDeclaration;
  70. Array<BfAstNode*> mDeferredNodes;
  71. public:
  72. void HandleLeafNode(BfAstNode* node);
  73. void VisitMembers(BfBlock* node);
  74. void ModifyFlags(BfAstNode* node, uint8 andFlags, uint8 orFlags);
  75. void ModifyFlags(int startPos, int endPos, uint8 andFlags, uint8 orFlags);
  76. void SetElementType(BfAstNode* node, BfSourceElementType elementType);
  77. void SetElementType(BfAstNode* node, BfTypeCode typeCode);
  78. void SetElementType(int startPos, int endPos, BfSourceElementType elementType);
  79. void SetHighestElementType(BfAstNode* node, BfSourceElementType elementType);
  80. void SetHighestElementType(int startPos, int endPos, BfSourceElementType elementType);
  81. bool IsInterestedInMember(BfAstNode* node, bool forceSkip = false);
  82. bool WantsSkipParentMethod(BfAstNode* node);
  83. void Handle(BfTypeDeclaration* typeDeclaration);
  84. void MarkSkipped(int startPos, int endPos);
  85. void MarkSkipped(BfAstNode* node);
  86. void DeferNodes(BfBlock* block);
  87. void FlushDeferredNodes();
  88. public:
  89. BfSourceClassifier(BfParser* bfParser, CharData* charData);
  90. virtual void Visit(BfGenericConstraintsDeclaration* genericConstraints) override;
  91. virtual void Visit(BfAstNode* node) override;
  92. virtual void Visit(BfErrorNode* errorNode) override;
  93. virtual void Visit(BfFieldDeclaration* fieldDecl) override;
  94. virtual void Visit(BfFieldDtorDeclaration* fieldDtorDecl) override;
  95. virtual void Visit(BfPreprocesorIgnoredSectionNode* preprocesorIgnoredSection) override;
  96. virtual void Visit(BfPreprocessorNode* preprocessorNode) override;
  97. virtual void Visit(BfCommentNode* commentNode) override;
  98. virtual void Visit(BfAttributeDirective* attributeDirective) override;
  99. virtual void Visit(BfIdentifierNode* identifier) override;
  100. virtual void Visit(BfQualifiedNameNode* identifier) override;
  101. virtual void Visit(BfThisExpression* thisExpr) override;
  102. virtual void Visit(BfBaseExpression* baseExpr) override;
  103. virtual void Visit(BfMemberReferenceExpression* memberRefExpr) override;
  104. virtual void Visit(BfQualifiedTypeReference* qualifiedType) override;
  105. virtual void Visit(BfRefTypeRef* typeRef) override;
  106. virtual void Visit(BfArrayTypeRef* arrayType) override;
  107. virtual void Visit(BfPointerTypeRef* pointerType) override;
  108. virtual void Visit(BfNamedTypeReference* typeRef) override;
  109. virtual void Visit(BfTagTypeRef* typeRef) override;
  110. virtual void Visit(BfGenericInstanceTypeRef* typeRef) override;
  111. virtual void Visit(BfVariableDeclaration* varDecl) override;
  112. virtual void Visit(BfLambdaBindExpression* lambdaBindExpr) override;
  113. virtual void Visit(BfLocalMethodDeclaration* methodDecl) override;
  114. virtual void Visit(BfLiteralExpression* literalExpr) override;
  115. virtual void Visit(BfStringInterpolationExpression* stringInterpolationExpression) override;
  116. virtual void Visit(BfTokenNode* tokenNode) override;
  117. virtual void Visit(BfCaseExpression* caseExpr) override;
  118. virtual void Visit(BfInvocationExpression* invocationExpr) override;
  119. virtual void Visit(BfIndexerExpression* indexerExpr) override;
  120. virtual void Visit(BfConstructorDeclaration* ctorDeclaration) override;
  121. virtual void Visit(BfDestructorDeclaration* dtorDeclaration) override;
  122. virtual void Visit(BfMethodDeclaration* methodDeclaration) override;
  123. virtual void Visit(BfPropertyMethodDeclaration* propertyMethodDeclaration) override;
  124. virtual void Visit(BfPropertyDeclaration* propertyDeclaration) override;
  125. virtual void Visit(BfTypeDeclaration* typeDeclaration) override;
  126. virtual void Visit(BfTypeAliasDeclaration* typeDeclaration) override;
  127. virtual void Visit(BfUsingDirective* usingDirective) override;
  128. virtual void Visit(BfUsingModDirective* usingDirective) override;
  129. virtual void Visit(BfNamespaceDeclaration* namespaceDeclaration) override;
  130. virtual void Visit(BfBlock* block) override;
  131. virtual void Visit(BfRootNode* rootNode) override;
  132. virtual void Visit(BfInlineAsmStatement* asmStmt) override;
  133. virtual void Visit(BfInlineAsmInstruction* asmInst) override;
  134. };
  135. NS_BF_END