diff --git a/components/codetools/tests/laztests/tcompletion_keywords.pas b/components/codetools/tests/laztests/tcompletion_keywords.pas new file mode 100644 index 0000000000..09f2a570e3 --- /dev/null +++ b/components/codetools/tests/laztests/tcompletion_keywords.pas @@ -0,0 +1,110 @@ +{%identcomplincludekeywords:on} +unit {completion:+5=!do,!label,!repeat,!else,!inherited,!and,!not} +tcompletion_keywords {completion:+21=!do,!label,!repeat,!else,!inherited,!and,!not} +; {completion:+2=!do,!label,!repeat,!else,!inherited,!and,!not} + +{$mode objfpc}{$H+} +{$ModeSwitch typehelpers} +{$ModeSwitch advancedrecords} + +interface {completion:+11=!do,!label,!repeat,!else,!inherited,!and,!not} + +uses {completion:+5=!do,!label,!repeat,!else,!inherited,!and,!not} +system {completion:+7=!do,!label,!repeat,!else,!inherited,!and,!not} +; + +const {completion:+6=!do,!label,!repeat,!else,!inherited,!and,!not} + MYCONST + = {completion:+2=!do,!label,!repeat,!else,!inherited,!and,!not} + 1 {completion:+2=!do,!label,!repeat,!else,!inherited,!and,!not} + ; {completion:+2=!do,!label,!repeat,!else,!inherited,!and,!not} + MYCONST_B = 'test' ; {completion:+1=!do,!label,!repeat,!else,!inherited,!and,!not} + +var {completion:+4=!do,!label,!repeat,!else,!inherited,!and,!not} + MyVar {completion:+6=!do,!label,!repeat,!else,!inherited,!and,!not} + : {completion:+1=!do,!label,!repeat,!else,!inherited,!and,!not} + Integer {completion:+8=!do,!label,!repeat,!else,!inherited,!and,!not} + ; {completion:+1=!do,!label,!repeat,!else,!inherited,!and,!not} + MyVar2: TObject ; {completion:+1=!do,!label,!repeat,!else,!inherited,!and,!not,!case} + // TODO: "case" in record + MyVar3: record {completion:+7=!do,!label,!repeat,!else,!inherited,!and,!not} + a: Integer ; {completion:+1=!do,!label,!repeat,!else,!inherited,!and,!not} + a2 {completion:+3=!do,!label,!repeat,!else,!inherited,!and,!not} + : {completion:+1=!do,!label,!repeat,!else,!inherited,!and,!not} + Integer {completion:+8=!do,!label,!repeat,!else,!inherited,!and,!not} + ; {completion:+1=!do,!label,!repeat,!else,!inherited,!and,!not} + case + boolean {completion:+8=!do,!label,!repeat,!else,!inherited,!and,!not} // TODO: "of" + of + true: ( + b: TObject; + ); + false: ( + c: array [0..1] of integer; + ); + end; + +type + TFoo {completion:+5=!do,!label,!repeat,!else,!inherited,!and,!not} + = {completion:+1=!do,!label,!repeat,!else,!inherited,!and,!not} + class {completion:+6=!do,!label,!repeat,!else,!inherited,!and,!not} + ; + + TIntA = {completion:+1=!do,!label,!repeat,!else,!inherited,!and,!not} // TODO: "array" + array {completion:+6=!do,!label,!repeat,!else,!inherited,!and,!not} // TODO: "of" + of + integer; + + TIntB = array + [ 0..9 ] {completion:+1=!do,!label,!repeat,!else,!inherited,!and,!not} // TODO: "of" + of + integer; + + TFoo = class {completion:+6=!do,!label,!repeat,!else,!inherited,!and,!not} + ( {completion:+1=!do,!label,!repeat,!else,!inherited,!and,!not} + TObject {completion:+8=!do,!label,!repeat,!else,!inherited,!and,!not} + ) {completion:+1=!do,!label,!repeat,!else,!inherited,!and,!not} + a {completion:+2=!do,!label,!repeat,!else,!inherited,!and,!not} + : {completion:+1=!do,!label,!repeat,!else,!inherited,!and,!not} + Integer {completion:+8=!do,!label,!repeat,!else,!inherited,!and,!not} + ; {completion:+1=!do,!label,!repeat,!else,!inherited,!and,!not} + private + procedure {completion:+10=!do,!label,!repeat,!else,!inherited,!and,!not} + Bar {completion:+5=!do,!label,!repeat,!else,!inherited,!and,!not} + ; {completion:+1=!do,!label,!repeat,!else,!inherited,!and,!not} + end; + +procedure SomeProc(val: Integer; var v2, v3: TIntA); +function f1: TObject; + +implementation +var + bVal: Boolean; + iVal: integer; + ia: TIntA; + +procedure SomeProc(val: Integer); +begin {completion:+6=!do,!label,repeat,!else,inherited,!and,!not} + ; {completion:+1=!do,!label,repeat,!else,inherited,!and,!not} +end; + +procedure SomeProc(val: Integer; var v2, v3: TIntA); +begin + +end; + +function f1: TObject; +begin + +end; + +procedure TFoo.Bar; +begin + +end; + +begin + if {completion:+3=!and,not,inherited} // +3 test in space after if + iVal {completion:!and,!in,not,inherited;+1=!and,!in,!not,inherited;+5=and,in,!not,!inherited} // + 5 in spaces after iVal +end. + diff --git a/components/codetools/tests/testfinddeclaration.pas b/components/codetools/tests/testfinddeclaration.pas index fd35589f5d..c36529bc70 100644 --- a/components/codetools/tests/testfinddeclaration.pas +++ b/components/codetools/tests/testfinddeclaration.pas @@ -24,6 +24,9 @@ (* Expectation in test-files + {%identcomplincludekeywords:on} + Enables CodeToolBoss.IdentComplIncludeKeywords + {SELECT:TESTS=TEST(|TEST)*} Each "{" comment starting with a..z is a test instruction, or a list of test instructions separated by | @@ -278,6 +281,11 @@ begin DoParseModule(MainCode,FMainTool); CommentP:=1; Src:=MainTool.Src; + + CodeToolBoss.IdentComplIncludeKeywords := False; + if pos('{%identcomplincludekeywords:on}', LowerCase(Src)) > 0 then + CodeToolBoss.IdentComplIncludeKeywords := True; + while CommentPlength(Src) then break; @@ -472,6 +480,7 @@ begin until CommentP >= CommentEnd; end; CheckReferenceMarkers; + CodeToolBoss.IdentComplIncludeKeywords := False; end; function TCustomTestFindDeclaration.GetMarkers(Index: integer): TFDMarker; @@ -515,6 +524,7 @@ procedure TCustomTestFindDeclaration.SetUp; begin inherited SetUp; FMarkers:=TObjectList.Create(true); + CodeToolBoss.IdentComplIncludeKeywords := False; end; procedure TCustomTestFindDeclaration.TearDown;