SynEdit: fix more PasHighLighter for "default" modifier after property. (fix false matches). Issue #39726

This commit is contained in:
Martin 2022-05-04 21:14:06 +02:00
parent bf34151409
commit 69682be8b0
2 changed files with 126 additions and 22 deletions

View File

@ -964,7 +964,13 @@ begin
end
end
else
if KeyComp('And') then Result := tkKey else Result := tkIdentifier;
if KeyComp('And') then begin
Result := tkKey;
if rsProperty in fRange then
fRange := fRange + [rsAtPropertyOrReadWrite];
end
else
Result := tkIdentifier;
end;
function TSynPasSyn.Func20: TtkTokenKind;
@ -1070,7 +1076,13 @@ begin
end;
end
else
if KeyComp('In') then Result := tkKey else Result := tkIdentifier;
if KeyComp('In') then begin
Result := tkKey;
if rsProperty in fRange then
fRange := fRange + [rsAtPropertyOrReadWrite];
end
else
Result := tkIdentifier;
end;
function TSynPasSyn.Func25: TtkTokenKind;
@ -1096,7 +1108,7 @@ begin
KeyComp('Read')
then begin
Result := tkKey;
fRange := fRange + [rsAtPropertyOrReadWrite];
fRange := fRange + [rsAtPropertyOrReadWrite] - [rsVarTypeInSpecification];
end
else if KeyComp('Case') then begin
if TopPascalCodeFoldBlockType in PascalStatementBlocks + [cfbtUnitSection] then
@ -1127,7 +1139,11 @@ begin
Result := tkKey;
end
else
if KeyComp('Mod') then Result := tkKey
if KeyComp('Mod') then begin
Result := tkKey;
if rsProperty in fRange then
fRange := fRange + [rsAtPropertyOrReadWrite];
end
else
if KeyComp('File') then Result := tkKey
else
@ -1136,7 +1152,11 @@ end;
function TSynPasSyn.Func33: TtkTokenKind;
begin
if KeyComp('Or') then Result := tkKey
if KeyComp('Or') then begin
Result := tkKey;
if rsProperty in fRange then
fRange := fRange + [rsAtPropertyOrReadWrite];
end
else
if KeyComp('Asm') then
begin
@ -1152,9 +1172,19 @@ end;
function TSynPasSyn.Func35: TtkTokenKind;
begin
if KeyComp('Nil') then Result := tkKey else
if KeyComp('To') then Result := tkKey else
if KeyComp('Div') then Result := tkKey else Result := tkIdentifier;
if KeyComp('Nil') then
Result := tkKey
else
if KeyComp('To') then
Result := tkKey
else
if KeyComp('Div') then begin
Result := tkKey;
if rsProperty in fRange then
fRange := fRange + [rsAtPropertyOrReadWrite];
end
else
Result := tkIdentifier;
end;
function TSynPasSyn.Func37: TtkTokenKind;
@ -1191,7 +1221,13 @@ begin
StartPascalCodeFoldBlock(cfbtForDo);
end
else
if KeyComp('Shl') then Result := tkKey else Result := tkIdentifier;
if KeyComp('Shl') then begin
Result := tkKey;
if rsProperty in fRange then
fRange := fRange + [rsAtPropertyOrReadWrite];
end
else
Result := tkIdentifier;
end;
function TSynPasSyn.Func40: TtkTokenKind;
@ -1271,7 +1307,13 @@ end;
function TSynPasSyn.Func45: TtkTokenKind;
begin
if KeyComp('Shr') then Result := tkKey else Result := tkIdentifier;
if KeyComp('Shr') then begin
Result := tkKey;
if rsProperty in fRange then
fRange := fRange + [rsAtPropertyOrReadWrite];
end
else
Result := tkIdentifier;
end;
function TSynPasSyn.Func46: TtkTokenKind;
@ -1303,7 +1345,15 @@ end;
function TSynPasSyn.Func49: TtkTokenKind;
begin
if KeyComp('Not') then Result := tkKey else Result := tkIdentifier;
if KeyComp('Not') then begin
Result := tkKey;
if rsProperty in fRange then begin
fRange := fRange + [rsAtPropertyOrReadWrite];
FOldRange := FOldRange - [rsAtPropertyOrReadWrite];
end;
end
else
Result := tkIdentifier;
end;
function TSynPasSyn.Func52: TtkTokenKind;
@ -1352,7 +1402,7 @@ begin
(PasCodeFoldRange.BracketNestLevel = 0)
then begin
Result := tkKey;
fRange := fRange + [rsAtPropertyOrReadWrite];
fRange := fRange + [rsAtPropertyOrReadWrite] - [rsVarTypeInSpecification];
end
else
Result := tkIdentifier;
@ -1369,7 +1419,13 @@ begin
StartPascalCodeFoldBlock(cfbtWhileDo);
end
else
if KeyComp('Xor') then Result := tkKey else Result := tkIdentifier;
if KeyComp('Xor') then begin
Result := tkKey;
if rsProperty in fRange then
fRange := fRange + [rsAtPropertyOrReadWrite];
end
else
Result := tkIdentifier;
end;
function TSynPasSyn.Func58: TtkTokenKind;
@ -1510,7 +1566,7 @@ begin
then begin
Result := tkKey;
if rsProperty in fRange then
fRange := fRange + [rsAtPropertyOrReadWrite];
fRange := fRange + [rsAtPropertyOrReadWrite] - [rsVarTypeInSpecification];
end
else
Result := tkIdentifier;
@ -1583,7 +1639,7 @@ begin
KeyComp('Write') then
begin
Result := tkKey;
fRange := fRange + [rsAtPropertyOrReadWrite];
fRange := fRange + [rsAtPropertyOrReadWrite] - [rsVarTypeInSpecification];
end
else
Result := tkIdentifier;
@ -2004,8 +2060,13 @@ begin
fRange := fRange + [rsInProcHeader];
Result := tkKey;
end
else if KeyComp('specialize') then
Result := tkKey
else if KeyComp('specialize') then begin
Result := tkKey;
if rsProperty in fRange then begin
fRange := fRange + [rsAtPropertyOrReadWrite];
FOldRange := FOldRange - [rsAtPropertyOrReadWrite];
end;
end
else
Result := tkIdentifier;
end;
@ -2872,7 +2933,7 @@ begin
else begin
fRange := fRange + [rsAfterEqualOrColon] - [rsAtCaseLabel];
if (TopPascalCodeFoldBlockType in [cfbtVarType, cfbtLocalVarType, cfbtClass, cfbtClassSection, cfbtRecord]) and
not(rsAfterClassMembers in fRange)
( (rsProperty in fRange) or not(rsAfterClassMembers in fRange) )
then
fRange := fRange + [rsVarTypeInSpecification];
end;
@ -2884,7 +2945,7 @@ begin
inc(Run);
if fLine[Run] = '=' then
inc(Run);
if rsProperty in fRange then
if fRange * [rsProperty, rsVarTypeInSpecification] = [rsProperty] then
fRange := fRange + [rsAtPropertyOrReadWrite];
end;
@ -2952,8 +3013,10 @@ begin
fTokenID := tkSymbol;
inc(Run);
if fLine[Run] in ['=', '>'] then inc(Run);
if rsProperty in fRange then
if rsProperty in fRange then begin
fRange := fRange + [rsAtPropertyOrReadWrite];
FOldRange := FOldRange - [rsAtPropertyOrReadWrite];
end;
end;
procedure TSynPasSyn.CaretProc;
@ -3022,8 +3085,10 @@ begin
if fLine[Run] in ['.', ')'] then
inc(Run)
else
if fRange * [rsProperty, rsAfterClassMembers] <> [] then // Also happens for result-type of functions (if they have a dot)
if fRange * [rsProperty, rsAfterClassMembers] <> [] then begin // Also happens for result-type of functions (if they have a dot)
fRange := fRange + [rsAtPropertyOrReadWrite];
FOldRange := FOldRange - [rsAtPropertyOrReadWrite];
end;
end;
procedure TSynPasSyn.AnsiProc;
@ -3244,8 +3309,10 @@ procedure TSynPasSyn.SymbolProc;
begin
inc(Run);
fTokenID := tkSymbol;
if rsProperty in fRange then
if rsProperty in fRange then begin
fRange := fRange + [rsAtPropertyOrReadWrite];
FOldRange := FOldRange - [rsAtPropertyOrReadWrite];
end;
end;
function TSynPasSyn.TypeHelpersIsStored: Boolean;

View File

@ -687,6 +687,9 @@ begin
{12} 'property default:default index default read default default default-default+default;',
// property could read a field inside an embedded record
{13} 'property default:default.default index {C} default.default read {C} default.default {C} default default.default * default.default;',
{14} 'property default: default index not default.default read default default -default.default;',
{15} 'property default: default.default index specialize default<default, default>.default read default default default.default;',
{16} 'property default: specialize default<default, default> index specialize default<default, default>.default read default default specialize default<default, default>.default;',
''
]);
@ -749,6 +752,40 @@ begin
tkSymbol, tkSpace, tkIdentifier, TK_Dot, tkIdentifier, TK_Semi // * default.default;
]);
CheckTokensForLine('property default: default index not default.default read default default -default.default;', 14,
[ tkKey, tkSpace, tkIdentifier, TK_Colon, tkSpace, tkIdentifier, tkSpace, // property default:default
tkKey, tkSpace, tkKey, tkSpace, tkIdentifier, TK_Dot, tkIdentifier, tkSpace, // index not default.default
tkKey, tkSpace, tkIdentifier, tkSpace, //read default
tkKey, tkSpace, tkSymbol, tkIdentifier, TK_Dot, tkIdentifier, TK_Semi // default -default.default;
]);
CheckTokensForLine('property default: default.default index specialize default<default, default>.default read default default default.default;', 15,
[ tkKey, tkSpace, tkIdentifier, TK_Colon, tkSpace, tkIdentifier, TK_Dot, tkIdentifier, tkSpace, // property default: default.default
tkKey, tkSpace, tkKey, tkSpace, // index specialize
tkIdentifier, tkSymbol, tkIdentifier, tkSymbol, tkSpace, tkIdentifier, tkSymbol, //default<default, default>
tkSymbol, tkIdentifier, tkSpace, // .default
tkKey, tkSpace, tkIdentifier, tkSpace, // read default
tkKey, tkSpace, tkIdentifier, TK_Dot, tkIdentifier, TK_Semi // default default.default;
]);
CheckTokensForLine('property default: specialize default<default, default> index specialize default<default, default>.default read default default specialize default<default, default>.default;', 16,
[ tkKey, tkSpace, tkIdentifier, TK_Colon, tkSpace, // property default:
tkKey, tkSpace, //specialize
tkIdentifier, tkSymbol, tkIdentifier, tkSymbol, tkSpace, tkIdentifier, tkSymbol, tkSpace, //default<default, default>
tkKey, tkSpace, tkKey, tkSpace, // index specialize
tkIdentifier, tkSymbol, tkIdentifier, tkSymbol, tkSpace, tkIdentifier, tkSymbol, // default<default, default>
tkSymbol, tkIdentifier, tkSpace, // .default
tkKey, tkSpace, tkIdentifier, tkSpace, // read default
tkKey, tkSpace, tkKey, tkSpace, // default specialize
tkIdentifier, tkSymbol, tkIdentifier, tkSymbol, tkSpace, tkIdentifier, tkSymbol, // default<default, default>
tkSymbol, tkIdentifier, TK_Semi // .default;
]);
{%endregion}
end;