Skip to content

Commit

Permalink
better symbol filtering for include files
Browse files Browse the repository at this point in the history
  • Loading branch information
genericptr committed Aug 25, 2020
1 parent 2dbbde9 commit 23dde53
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 10 deletions.
25 changes: 17 additions & 8 deletions documentSymbol.pas
Original file line number Diff line number Diff line change
Expand Up @@ -712,6 +712,10 @@ procedure TSymbolExtractor.ExtractProcedure(ParentNode, Node: TCodeTreeNode);
Symbol := TSymbol(OverloadMap.Find(Name));
if Symbol <> nil then
begin
// TODO: when newest LSP version is released on package control
// we can include the container name to be implementation
// and at least make this an option

// if the overloaded name is found in the implementation section
// then just ignore it so we have only function in the list
if CodeSection = ctnImplementation then
Expand Down Expand Up @@ -761,9 +765,13 @@ procedure TSymbolExtractor.ExtractCodeSection(Node: TCodeTreeNode);
PrintNodeDebug(Node);

// ignore nodes from include files
// for main code files ignore include nodes
// for include files ignore main code nodes
Scanner := Tool.Scanner;
LinkIndex := Scanner.LinkIndexAtCleanPos(Node.StartPos);
if (LinkIndex >= 0) and (Scanner.LinkP[LinkIndex]^.Code<>Scanner.MainCode) then
if (LinkIndex >= 0) and (Scanner.LinkP[LinkIndex]^.Code <> nil) and
not (Node.Desc in AllCodeSections) and
(Code.FileName <> TCodeBuffer(Scanner.LinkP[LinkIndex]^.Code).FileName) then
begin
Node := Node.NextBrother;
continue;
Expand All @@ -774,9 +782,9 @@ procedure TSymbolExtractor.ExtractCodeSection(Node: TCodeTreeNode);
begin
case Node.Desc of
ctnInterface:
AddSymbol(Node, SymbolKindNamespace, '==== INTERFACE ====');
AddSymbol(Node, SymbolKindNamespace, kSymbolName_Interface);
ctnImplementation:
AddSymbol(Node, SymbolKindNamespace, '==== IMPLEMENTATION ====');
AddSymbol(Node, SymbolKindNamespace, kSymbolName_Implementation);
end;
CodeSection := Node.Desc;
Inc(IndentLevel);
Expand Down Expand Up @@ -1233,16 +1241,17 @@ function TSymbolManager.FindDocumentSymbols(Path: String): TJSONSerializedArray;
var
Entry: TSymbolTableEntry;
FileName: ShortString;
Code, MainCode: TCodeBuffer;
Code: TCodeBuffer;
begin

// get the main code in case we're dealing with includes
Code := CodeToolBoss.FindFile(Path);
MainCode := CodeToolBoss.GetMainCode(Code);
if MainCode = nil then
//Code := CodeToolBoss.GetMainCode(Code);
writeln('CodeBuffer: ', Code.Filename);
if Code = nil then
exit(nil);

FileName := GetFileKey(MainCode.FileName);
FileName := GetFileKey(Code.FileName);
Entry := TSymbolTableEntry(SymbolTable.Find(FileName));

// the symtable entry was explicitly modified so it needs to be reloaded
Expand Down Expand Up @@ -1279,7 +1288,7 @@ procedure TSymbolManager.Reload(Code: TCodeBuffer; Always: Boolean = false);
StartTime: TDateTime;
begin
StartTime := Now;
Code := CodeToolBoss.GetMainCode(Code);
//Code := CodeToolBoss.GetMainCode(Code);
//if CompareCodeBuffers(MainCode, Code) <> 0 then
// begin
// writeln(stderr, 'main code is not current code.');
Expand Down
17 changes: 15 additions & 2 deletions general.pas
Original file line number Diff line number Diff line change
Expand Up @@ -206,8 +206,21 @@ function TInitialize.Process(var Params : TInitializeParams): TInitializeResult;
else
writeln(stderr, kStatusPrefix+'Symbol Database: [unspecified]');

writeln(stderr, kStatusPrefix+'Maximum Completions: ', ServerSettings.maximumCompletions);
writeln(stderr, kStatusPrefix+'Overload Policy: ', ServerSettings.overloadPolicy);
// other settings
writeln(stderr, kStatusPrefix+'Settings:');
writeln(stderr, ' ► maximumCompletions: ', ServerSettings.maximumCompletions);
writeln(stderr, ' ► overloadPolicy: ', ServerSettings.overloadPolicy);
writeln(stderr, ' ► insertCompletionsAsSnippets: ', ServerSettings.insertCompletionsAsSnippets);
writeln(stderr, ' ► insertCompletionProcedureBrackets: ', ServerSettings.insertCompletionProcedureBrackets);
writeln(stderr, ' ► includeWorkspaceFoldersAsUnitPaths: ', ServerSettings.includeWorkspaceFoldersAsUnitPaths);
writeln(stderr, ' ► includeWorkspaceFoldersAsIncludePaths: ', ServerSettings.includeWorkspaceFoldersAsIncludePaths);
writeln(stderr, ' ► checkSyntax: ', ServerSettings.checkSyntax);
writeln(stderr, ' ► publishDiagnostics: ', ServerSettings.publishDiagnostics);
writeln(stderr, ' ► workspaceSymbols: ', ServerSettings.workspaceSymbols);
writeln(stderr, ' ► documentSymbols: ', ServerSettings.documentSymbols);
writeln(stderr, ' ► minimalisticCompletions: ', ServerSettings.minimalisticCompletions);
writeln(stderr, ' ► showSyntaxErrors: ', ServerSettings.showSyntaxErrors);

Flush(stderr);
end;

Expand Down
5 changes: 5 additions & 0 deletions settings.pas
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ interface
uses
Classes, FGL;

{ Global String Constants }
const
kSymbolName_Interface = '==== INTERFACE ====';
kSymbolName_Implementation = '==== IMPLEMENTATION ====';

type
TOverloadPolicy = ( Duplicates = 1, // duplicate function names appear in the list
Ignore = 2, // after the original definition ignore others
Expand Down

0 comments on commit 23dde53

Please sign in to comment.