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:19:08 -05:00
parent d21bcbb0ac
commit 4d9388f389
6 changed files with 22 additions and 7 deletions

View File

@ -13,6 +13,7 @@
class LineDataSource;
class TeamTypeInformation;
enum syntax_highlight_type {
@ -48,6 +49,7 @@ public:
virtual ~SyntaxHighlighter();
virtual status_t ParseText(LineDataSource* source,
TeamTypeInformation* typeInfo,
SyntaxHighlightInfo*& _info) = 0;
// caller owns the returned info
};

View File

@ -10,6 +10,8 @@
#include "CLanguageTokenizer.h"
#include "LineDataSource.h"
#include "TeamTypeInformation.h"
#include "TypeLookupConstraints.h"
using namespace CLanguage;
@ -167,11 +169,13 @@ private:
CLanguageFamilySyntaxHighlightInfo::CLanguageFamilySyntaxHighlightInfo(
LineDataSource* source, Tokenizer* tokenizer)
LineDataSource* source, Tokenizer* tokenizer,
TeamTypeInformation* typeInfo)
:
SyntaxHighlightInfo(),
fHighlightSource(source),
fTokenizer(tokenizer),
fTypeInfo(typeInfo),
fLineInfos(10, true)
{
fHighlightSource->AcquireReference();
@ -310,11 +314,14 @@ CLanguageFamilySyntaxHighlightInfo::_ParseLine(int32 line,
syntax_highlight_type
CLanguageFamilySyntaxHighlightInfo::_MapTokenToSyntaxType(const Token& token)
{
static TypeLookupConstraints constraints;
switch (token.type) {
case TOKEN_IDENTIFIER:
// TODO: recognize types
if (IsLanguageKeyword(token))
return SYNTAX_HIGHLIGHT_KEYWORD;
else if (fTypeInfo->TypeExistsByName(token.string, constraints))
return SYNTAX_HIGHLIGHT_TYPE;
break;
case TOKEN_CONSTANT:

View File

@ -16,12 +16,15 @@ namespace CLanguage {
class Tokenizer;
}
class TeamTypeInformation;
class CLanguageFamilySyntaxHighlightInfo : public SyntaxHighlightInfo {
public:
CLanguageFamilySyntaxHighlightInfo(
LineDataSource* source,
CLanguage::Tokenizer* tokenizer);
CLanguage::Tokenizer* tokenizer,
TeamTypeInformation* info);
virtual ~CLanguageFamilySyntaxHighlightInfo();
virtual int32 GetLineHighlightRanges(int32 line,
@ -44,6 +47,7 @@ private:
private:
LineDataSource* fHighlightSource;
CLanguage::Tokenizer* fTokenizer;
TeamTypeInformation* fTypeInfo;
LineInfoList fLineInfos;
};

View File

@ -31,7 +31,7 @@ CLanguageFamilySyntaxHighlighter::~CLanguageFamilySyntaxHighlighter()
status_t
CLanguageFamilySyntaxHighlighter::ParseText(LineDataSource* source,
SyntaxHighlightInfo*& _info)
TeamTypeInformation* typeInfo, SyntaxHighlightInfo*& _info)
{
Tokenizer* tokenizer = new(std::nothrow) Tokenizer();
if (tokenizer == NULL)
@ -39,7 +39,7 @@ CLanguageFamilySyntaxHighlighter::ParseText(LineDataSource* source,
ObjectDeleter<Tokenizer> deleter(tokenizer);
_info = new(std::nothrow) CLanguageFamilySyntaxHighlightInfo(source,
tokenizer);
tokenizer, typeInfo);
if (_info == NULL)
return B_NO_MEMORY;

View File

@ -15,6 +15,7 @@ public:
virtual ~CLanguageFamilySyntaxHighlighter();
virtual status_t ParseText(LineDataSource* source,
TeamTypeInformation* typeInfo,
SyntaxHighlightInfo*& _info);
// caller owns the returned info
};

View File

@ -76,7 +76,7 @@ static rgb_color kSyntaxColors[] = {
{0, 0x64, 0, 255}, // SYNTAX_HIGHLIGHT_PREPROCESSOR_KEYWORD
{0, 0, 0, 255}, // SYNTAX_HIGHLIGHT_IDENTIFIER
{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
{0x3f, 0x48, 0x84, 255}, // SYNTAX_HIGHLIGHT_STRING_LITERAL
{0xa1, 0x64, 0xe, 255}, // SYNTAX_HIGHLIGHT_COMMENT
@ -2254,7 +2254,8 @@ SourceView::SetSourceCode(SourceCode* sourceCode)
if (highlighter != NULL) {
BReference<SyntaxHighlighter> syntaxReference(highlighter,
true);
highlighter->ParseText(fSourceCode, fCurrentSyntaxInfo);
highlighter->ParseText(fSourceCode,
fTeam->GetTeamTypeInformation(), fCurrentSyntaxInfo);
}
}
}