From 2b9fa80b81c691c16a199c710434afc63f992fd9 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Mon, 2 Dec 2024 07:39:17 -0500 Subject: [PATCH] Added IDE colorization: Member, Local, Parameter --- IDE/src/Settings.bf | 17 +++++++++++-- IDE/src/ui/SourceEditWidgetContent.bf | 5 +++- IDE/src/ui/SourceViewPanel.bf | 5 +++- IDEHelper/Compiler/BfExprEvaluator.cpp | 14 ++++++++++ IDEHelper/Compiler/BfSourceClassifier.cpp | 31 ++++++++++++++++++++++- IDEHelper/Compiler/BfSourceClassifier.h | 9 +++++-- 6 files changed, 74 insertions(+), 7 deletions(-) diff --git a/IDE/src/Settings.bf b/IDE/src/Settings.bf index 934543e2..a5ff6c3b 100644 --- a/IDE/src/Settings.bf +++ b/IDE/src/Settings.bf @@ -324,6 +324,9 @@ namespace IDE public Color mLiteral = 0XFFC8A0FF; public Color mIdentifier = 0xFFFFFFFF; public Color mComment = 0xFF75715E; + public Color mLocal = 0xFFFFFFFF; + public Color mParameter = 0xFFFFFFFF; + public Color mMember = 0xFFFFFFFF; public Color mMethod = 0xFFA6E22A; public Color mType = 0xFF66D9EF; public Color mPrimitiveType = 0xFF66D9EF; @@ -371,8 +374,15 @@ namespace IDE GetColor("Keyword", ref mKeyword); GetColor("Literal", ref mLiteral); GetColor("Identifier", ref mIdentifier); - GetColor("Comment", ref mComment); + mLocal = mIdentifier; + mParameter = mIdentifier; + GetColor("Local", ref mLocal); + GetColor("Parameter", ref mParameter); + mMember = mIdentifier; + GetColor("Member", ref mMember); + mMethod = mMember; GetColor("Method", ref mMethod); + GetColor("Comment", ref mComment); if (sd.Contains("Type")) { GetColor("Type", ref mType); @@ -409,8 +419,11 @@ namespace IDE SourceEditWidgetContent.sTextColors[(.)SourceElementType.Normal] = mCode; SourceEditWidgetContent.sTextColors[(.)SourceElementType.Keyword] = mKeyword; SourceEditWidgetContent.sTextColors[(.)SourceElementType.Literal] = mLiteral; - SourceEditWidgetContent.sTextColors[(.)SourceElementType.Identifier] = mIdentifier; SourceEditWidgetContent.sTextColors[(.)SourceElementType.Comment] = mComment; + SourceEditWidgetContent.sTextColors[(.)SourceElementType.Identifier] = mIdentifier; + SourceEditWidgetContent.sTextColors[(.)SourceElementType.Local] = mLocal; + SourceEditWidgetContent.sTextColors[(.)SourceElementType.Parameter] = mParameter; + SourceEditWidgetContent.sTextColors[(.)SourceElementType.Member] = mMember; SourceEditWidgetContent.sTextColors[(.)SourceElementType.Method] = mMethod; SourceEditWidgetContent.sTextColors[(.)SourceElementType.Type] = mType; SourceEditWidgetContent.sTextColors[(.)SourceElementType.PrimitiveType] = mPrimitiveType; diff --git a/IDE/src/ui/SourceEditWidgetContent.bf b/IDE/src/ui/SourceEditWidgetContent.bf index dee43eb3..02b922f6 100644 --- a/IDE/src/ui/SourceEditWidgetContent.bf +++ b/IDE/src/ui/SourceEditWidgetContent.bf @@ -785,8 +785,11 @@ namespace IDE.ui 0xFFFFFFFF, // Normal 0xFFE1AE9A, // Keyword 0XFFC8A0FF, // Literal + 0xFF75715E, // Comment 0xFFFFFFFF, // Identifier - 0xFF75715E, // Comment + 0xFFFFFFFF, // Local + 0xFFFFFFFF, // Parameter + 0xFFFFFFFF, // Member 0xFFA6E22A, // Method 0xFF66D9EF, // Type 0xFF66D9EF, // PrimitiveType diff --git a/IDE/src/ui/SourceViewPanel.bf b/IDE/src/ui/SourceViewPanel.bf index 8f2318bd..ac4362a0 100644 --- a/IDE/src/ui/SourceViewPanel.bf +++ b/IDE/src/ui/SourceViewPanel.bf @@ -26,8 +26,11 @@ namespace IDE.ui Normal, Keyword, Literal, + Comment, Identifier, - Comment, + Local, + Parameter, + Member, Method, Type, PrimitiveType, diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 362d9382..25c58c3e 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -4464,6 +4464,8 @@ BfTypedValue BfExprEvaluator::LookupIdentifier(BfAstNode* refNode, const StringI } } + mModule->SetElementType(identifierNode, (varDecl->IsParam()) ? BfSourceElementType_Parameter : BfSourceElementType_Local); + BfTypedValue localResult = LoadLocal(varDecl); auto autoComplete = GetAutoComplete(); if (identifierNode != NULL) @@ -4517,6 +4519,8 @@ BfTypedValue BfExprEvaluator::LookupIdentifier(BfAstNode* refNode, const StringI else if (fieldDef->mIsReadOnly) result = mModule->LoadValue(result); + //mModule->SetElementType(identifierNode, (localVar->IsParam()) ? BfSourceElementType_Parameter : BfSourceElementType_Local); + mResultLocalVar = localVar; mResultFieldInstance = &field; mResultLocalVarField = -(field.mMergedDataIdx + 1); @@ -4676,7 +4680,10 @@ BfTypedValue BfExprEvaluator::LookupIdentifier(BfAstNode* refNode, const StringI thisValue = BfTypedValue(globalContainer.mTypeInst); result = LookupField(identifierNode, thisValue, findName); if ((result) || (mPropDef != NULL)) + { + mModule->SetElementType(identifierNode, BfSourceElementType_Member); return result; + } } } @@ -4688,10 +4695,17 @@ BfTypedValue BfExprEvaluator::LookupIdentifier(BfAstNode* refNode, const StringI thisValue = BfTypedValue(typeInst); result = LookupField(identifierNode, thisValue, findName); if ((result) || (mPropDef != NULL)) + { + mModule->SetElementType(identifierNode, BfSourceElementType_Member); return result; + } } } } + else + { + mModule->SetElementType(identifierNode, BfSourceElementType_Member); + } if ((!result) && (identifierNode != NULL)) { diff --git a/IDEHelper/Compiler/BfSourceClassifier.cpp b/IDEHelper/Compiler/BfSourceClassifier.cpp index b407a1d5..5e5dfd5e 100644 --- a/IDEHelper/Compiler/BfSourceClassifier.cpp +++ b/IDEHelper/Compiler/BfSourceClassifier.cpp @@ -159,6 +159,7 @@ void BfSourceClassifier::Visit(BfFieldDeclaration* fieldDecl) VisitChild(fieldDecl->mReadOnlySpecifier); VisitChild(fieldDecl->mTypeRef); VisitChild(fieldDecl->mNameNode); + SetElementType(fieldDecl->mNameNode, BfSourceElementType_Member); } void BfSourceClassifier::Visit(BfFieldDtorDeclaration* fieldDtorDecl) @@ -285,6 +286,8 @@ void BfSourceClassifier::Visit(BfQualifiedNameNode* qualifiedName) VisitChild(qualifiedName->mLeft); VisitChild(qualifiedName->mDot); VisitChild(qualifiedName->mRight); + if (BfNodeIsExact(qualifiedName->mRight)) + SetElementType(qualifiedName->mRight, BfSourceElementType_Member); } void BfSourceClassifier::Visit(BfThisExpression* thisExpr) @@ -306,7 +309,7 @@ void BfSourceClassifier::Visit(BfMemberReferenceExpression* memberRefExpr) Visit((BfAstNode*)memberRefExpr); VisitChild(memberRefExpr->mTarget); VisitChild(memberRefExpr->mDotToken); - VisitChild(memberRefExpr->mMemberName); + SetElementType(memberRefExpr->mMemberName, BfSourceElementType_Member); } void BfSourceClassifier::Visit(BfNamedTypeReference* typeRef) @@ -395,6 +398,24 @@ void BfSourceClassifier::Visit(BfGenericInstanceTypeRef* genericInstTypeRef) VisitChild(genericInstTypeRef->mCloseChevron); } +void BfSourceClassifier::Visit(BfVariableDeclaration* varDecl) +{ + BfElementVisitor::Visit(varDecl); + + if (!varDecl->IsA()) + SetElementType(varDecl->mNameNode, BfSourceElementType_Local); +} + +void BfSourceClassifier::Visit(BfLambdaBindExpression* lambdaBindExpr) +{ + BfElementVisitor::Visit(lambdaBindExpr); + + for (auto param : lambdaBindExpr->mParams) + { + SetElementType(param, BfSourceElementType_Parameter); + } +} + void BfSourceClassifier::Visit(BfLocalMethodDeclaration* methodDecl) { if (IsInterestedInMember(methodDecl, true)) @@ -573,6 +594,12 @@ void BfSourceClassifier::Visit(BfMethodDeclaration* methodDeclaration) SetElementType(methodDeclaration->mNameNode, BfSourceElementType_Method); + for (auto paramDecl : methodDeclaration->mParams) + { + if (paramDecl != NULL) + SetElementType(paramDecl->mNameNode, BfSourceElementType_Parameter); + } + if (methodDeclaration->mGenericParams != NULL) { for (auto& genericParam : methodDeclaration->mGenericParams->mGenericParams) @@ -615,6 +642,8 @@ void BfSourceClassifier::Visit(BfPropertyDeclaration* propertyDeclaration) BfElementVisitor::Visit(propertyDeclaration); + SetElementType(propertyDeclaration->mNameNode, BfSourceElementType_Member); + if (auto expr = BfNodeDynCast(propertyDeclaration->mDefinitionBlock)) return; diff --git a/IDEHelper/Compiler/BfSourceClassifier.h b/IDEHelper/Compiler/BfSourceClassifier.h index 66f22eaa..ae0a9af9 100644 --- a/IDEHelper/Compiler/BfSourceClassifier.h +++ b/IDEHelper/Compiler/BfSourceClassifier.h @@ -12,8 +12,11 @@ enum BfSourceElementType BfSourceElementType_Normal, BfSourceElementType_Keyword, BfSourceElementType_Literal, - BfSourceElementType_Identifier, BfSourceElementType_Comment, + BfSourceElementType_Identifier, + BfSourceElementType_Local, + BfSourceElementType_Parameter, + BfSourceElementType_Member, BfSourceElementType_Method, BfSourceElementType_Type, BfSourceElementType_PrimitiveType, @@ -115,7 +118,9 @@ public: virtual void Visit(BfNamedTypeReference* typeRef) override; virtual void Visit(BfTagTypeRef* typeRef) override; virtual void Visit(BfGenericInstanceTypeRef* typeRef) override; - virtual void Visit(BfLocalMethodDeclaration * methodDecl) override; + virtual void Visit(BfVariableDeclaration* varDecl) override; + virtual void Visit(BfLambdaBindExpression* lambdaBindExpr) override; + virtual void Visit(BfLocalMethodDeclaration* methodDecl) override; virtual void Visit(BfLiteralExpression* literalExpr) override; virtual void Visit(BfStringInterpolationExpression* stringInterpolationExpression) override; virtual void Visit(BfTokenNode* tokenNode) override;