BfSourceClassifier.h 5.2 KB

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