mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-29 01:11:07 +02:00
SynEdit: fix more PasHighLighter for "default" modifier after property. (fix false matches). Issue #39726
This commit is contained in:
parent
bf34151409
commit
69682be8b0
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user