Debugger: Adjustments to syntax highlighter.

SyntaxHighlighter/CLanguageFamilySyntaxHighlighter/SourceView:
- TeamTypeInformation is now passed as a parameter when requesting parsing,
  so highlighters can make use of it to identify types. Adjust callers.

CLanguageFamilySyntaxHighlightInfo:
- Use TeamTypeInformation to check if identifiers map to types, and highlight
  accordingly if they do.
This commit is contained in:
Rene Gollent
2015-01-01 17:49:02 -05:00
parent d21bcbb0ac
commit 4d9388f389
6 changed files with 22 additions and 7 deletions
@@ -13,6 +13,7 @@
class LineDataSource; class LineDataSource;
class TeamTypeInformation;
enum syntax_highlight_type { enum syntax_highlight_type {
@@ -48,6 +49,7 @@ public:
virtual ~SyntaxHighlighter(); virtual ~SyntaxHighlighter();
virtual status_t ParseText(LineDataSource* source, virtual status_t ParseText(LineDataSource* source,
TeamTypeInformation* typeInfo,
SyntaxHighlightInfo*& _info) = 0; SyntaxHighlightInfo*& _info) = 0;
// caller owns the returned info // caller owns the returned info
}; };
@@ -10,6 +10,8 @@
#include "CLanguageTokenizer.h" #include "CLanguageTokenizer.h"
#include "LineDataSource.h" #include "LineDataSource.h"
#include "TeamTypeInformation.h"
#include "TypeLookupConstraints.h"
using namespace CLanguage; using namespace CLanguage;
@@ -167,11 +169,13 @@ private:
CLanguageFamilySyntaxHighlightInfo::CLanguageFamilySyntaxHighlightInfo( CLanguageFamilySyntaxHighlightInfo::CLanguageFamilySyntaxHighlightInfo(
LineDataSource* source, Tokenizer* tokenizer) LineDataSource* source, Tokenizer* tokenizer,
TeamTypeInformation* typeInfo)
: :
SyntaxHighlightInfo(), SyntaxHighlightInfo(),
fHighlightSource(source), fHighlightSource(source),
fTokenizer(tokenizer), fTokenizer(tokenizer),
fTypeInfo(typeInfo),
fLineInfos(10, true) fLineInfos(10, true)
{ {
fHighlightSource->AcquireReference(); fHighlightSource->AcquireReference();
@@ -310,11 +314,14 @@ CLanguageFamilySyntaxHighlightInfo::_ParseLine(int32 line,
syntax_highlight_type syntax_highlight_type
CLanguageFamilySyntaxHighlightInfo::_MapTokenToSyntaxType(const Token& token) CLanguageFamilySyntaxHighlightInfo::_MapTokenToSyntaxType(const Token& token)
{ {
static TypeLookupConstraints constraints;
switch (token.type) { switch (token.type) {
case TOKEN_IDENTIFIER: case TOKEN_IDENTIFIER:
// TODO: recognize types
if (IsLanguageKeyword(token)) if (IsLanguageKeyword(token))
return SYNTAX_HIGHLIGHT_KEYWORD; return SYNTAX_HIGHLIGHT_KEYWORD;
else if (fTypeInfo->TypeExistsByName(token.string, constraints))
return SYNTAX_HIGHLIGHT_TYPE;
break; break;
case TOKEN_CONSTANT: case TOKEN_CONSTANT:
@@ -16,12 +16,15 @@ namespace CLanguage {
class Tokenizer; class Tokenizer;
} }
class TeamTypeInformation;
class CLanguageFamilySyntaxHighlightInfo : public SyntaxHighlightInfo { class CLanguageFamilySyntaxHighlightInfo : public SyntaxHighlightInfo {
public: public:
CLanguageFamilySyntaxHighlightInfo( CLanguageFamilySyntaxHighlightInfo(
LineDataSource* source, LineDataSource* source,
CLanguage::Tokenizer* tokenizer); CLanguage::Tokenizer* tokenizer,
TeamTypeInformation* info);
virtual ~CLanguageFamilySyntaxHighlightInfo(); virtual ~CLanguageFamilySyntaxHighlightInfo();
virtual int32 GetLineHighlightRanges(int32 line, virtual int32 GetLineHighlightRanges(int32 line,
@@ -44,6 +47,7 @@ private:
private: private:
LineDataSource* fHighlightSource; LineDataSource* fHighlightSource;
CLanguage::Tokenizer* fTokenizer; CLanguage::Tokenizer* fTokenizer;
TeamTypeInformation* fTypeInfo;
LineInfoList fLineInfos; LineInfoList fLineInfos;
}; };
@@ -31,7 +31,7 @@ CLanguageFamilySyntaxHighlighter::~CLanguageFamilySyntaxHighlighter()
status_t status_t
CLanguageFamilySyntaxHighlighter::ParseText(LineDataSource* source, CLanguageFamilySyntaxHighlighter::ParseText(LineDataSource* source,
SyntaxHighlightInfo*& _info) TeamTypeInformation* typeInfo, SyntaxHighlightInfo*& _info)
{ {
Tokenizer* tokenizer = new(std::nothrow) Tokenizer(); Tokenizer* tokenizer = new(std::nothrow) Tokenizer();
if (tokenizer == NULL) if (tokenizer == NULL)
@@ -39,7 +39,7 @@ CLanguageFamilySyntaxHighlighter::ParseText(LineDataSource* source,
ObjectDeleter<Tokenizer> deleter(tokenizer); ObjectDeleter<Tokenizer> deleter(tokenizer);
_info = new(std::nothrow) CLanguageFamilySyntaxHighlightInfo(source, _info = new(std::nothrow) CLanguageFamilySyntaxHighlightInfo(source,
tokenizer); tokenizer, typeInfo);
if (_info == NULL) if (_info == NULL)
return B_NO_MEMORY; return B_NO_MEMORY;
@@ -15,6 +15,7 @@ public:
virtual ~CLanguageFamilySyntaxHighlighter(); virtual ~CLanguageFamilySyntaxHighlighter();
virtual status_t ParseText(LineDataSource* source, virtual status_t ParseText(LineDataSource* source,
TeamTypeInformation* typeInfo,
SyntaxHighlightInfo*& _info); SyntaxHighlightInfo*& _info);
// caller owns the returned info // caller owns the returned info
}; };
@@ -76,7 +76,7 @@ static rgb_color kSyntaxColors[] = {
{0, 0x64, 0, 255}, // SYNTAX_HIGHLIGHT_PREPROCESSOR_KEYWORD {0, 0x64, 0, 255}, // SYNTAX_HIGHLIGHT_PREPROCESSOR_KEYWORD
{0, 0, 0, 255}, // SYNTAX_HIGHLIGHT_IDENTIFIER {0, 0, 0, 255}, // SYNTAX_HIGHLIGHT_IDENTIFIER
{0x44, 0x8a, 0, 255}, // SYNTAX_HIGHLIGHT_OPERATOR {0x44, 0x8a, 0, 255}, // SYNTAX_HIGHLIGHT_OPERATOR
{0, 0, 0, 255}, // SYNTAX_HIGHLIGHT_TYPE {0x70, 0x70, 0x70, 255}, // SYNTAX_HIGHLIGHT_TYPE
{0x85, 0x19, 0x19, 255}, // SYNTAX_HIGHLIGHT_NUMERIC_LITERAL {0x85, 0x19, 0x19, 255}, // SYNTAX_HIGHLIGHT_NUMERIC_LITERAL
{0x3f, 0x48, 0x84, 255}, // SYNTAX_HIGHLIGHT_STRING_LITERAL {0x3f, 0x48, 0x84, 255}, // SYNTAX_HIGHLIGHT_STRING_LITERAL
{0xa1, 0x64, 0xe, 255}, // SYNTAX_HIGHLIGHT_COMMENT {0xa1, 0x64, 0xe, 255}, // SYNTAX_HIGHLIGHT_COMMENT
@@ -2254,7 +2254,8 @@ SourceView::SetSourceCode(SourceCode* sourceCode)
if (highlighter != NULL) { if (highlighter != NULL) {
BReference<SyntaxHighlighter> syntaxReference(highlighter, BReference<SyntaxHighlighter> syntaxReference(highlighter,
true); true);
highlighter->ParseText(fSourceCode, fCurrentSyntaxInfo); highlighter->ParseText(fSourceCode,
fTeam->GetTeamTypeInformation(), fCurrentSyntaxInfo);
} }
} }
} }