Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions src/protocol/LSP.Capabilities.pas
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,30 @@ TWorkspaceServerCapabilities = class(TLSPStreamable)
property workspaceFolders: TWorkspaceFoldersServerCapabilities read fWorkspaceFolders write SetWorkspaceFolders;
end;

{ TDocumentSymbolClientCapabilities }

TDocumentSymbolClientCapabilities = class(TLSPStreamable)
private
fHierarchicalDocumentSymbolSupport: boolean;
Public
Procedure Assign(Source : TPersistent); override;
published
// The client supports hierarchical document symbols.
property hierarchicalDocumentSymbolSupport: boolean read fHierarchicalDocumentSymbolSupport write fHierarchicalDocumentSymbolSupport;
end;

{ TTextDocumentClientCapabilities }

TTextDocumentClientCapabilities = class(TLSPStreamable)
private
fDocumentSymbol: TDocumentSymbolClientCapabilities;
procedure SetDocumentSymbol(AValue: TDocumentSymbolClientCapabilities);
Public
constructor Create; override;
destructor Destroy; override;
Procedure Assign(Source : TPersistent); override;
published
property documentSymbol: TDocumentSymbolClientCapabilities read fDocumentSymbol write SetDocumentSymbol;
end;

{ TClientCapabilities }
Expand Down Expand Up @@ -159,6 +180,53 @@ TServerCapabilities = class(TLSPStreamable)

implementation

{ TDocumentSymbolClientCapabilities }

procedure TDocumentSymbolClientCapabilities.Assign(Source : TPersistent);
var
Src : TDocumentSymbolClientCapabilities absolute Source;
begin
if Source is TDocumentSymbolClientCapabilities then
begin
HierarchicalDocumentSymbolSupport := Src.HierarchicalDocumentSymbolSupport;
end
else
inherited Assign(Source);
end;

{ TTextDocumentClientCapabilities }

procedure TTextDocumentClientCapabilities.SetDocumentSymbol(
AValue: TDocumentSymbolClientCapabilities);
begin
if fDocumentSymbol=AValue then Exit;
fDocumentSymbol.Assign(AValue);
end;

constructor TTextDocumentClientCapabilities.Create;
begin
Inherited;
fDocumentSymbol := TDocumentSymbolClientCapabilities.Create;
end;

destructor TTextDocumentClientCapabilities.Destroy;
begin
FreeAndNil(fDocumentSymbol);
inherited Destroy;
end;

procedure TTextDocumentClientCapabilities.Assign(Source : TPersistent);
var
Src : TTextDocumentClientCapabilities absolute Source;
begin
if Source is TTextDocumentClientCapabilities then
begin
DocumentSymbol := Src.DocumentSymbol;
end
else
inherited Assign(Source);
end;

{ TWorkspaceClientCapabilities }

procedure TWorkspaceClientCapabilities.Assign(Source : TPersistent);
Expand Down
18 changes: 18 additions & 0 deletions src/protocol/LSP.DocumentSymbol.pas
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,24 @@ TSymbolInformation = class(TCollectionItem)

TSymbolInformationItems = specialize TGenericCollection<TSymbolInformation>;

{ TDocumentSymbolEx }

{ Extended DocumentSymbol with additional fields for pasls-specific needs }

TSymbolFlag = (sfForwardDeclaration, sfDeprecated);
TSymbolFlags = set of TSymbolFlag;

TDocumentSymbolEx = class(TDocumentSymbol)
private
fRawJSON: String;
fFlags: TSymbolFlags;
public
property RawJSON: String read fRawJSON write fRawJSON;
property Flags: TSymbolFlags read fFlags write fFlags;
end;

TDocumentSymbolExItems = specialize TGenericCollection<TDocumentSymbolEx>;

{ TDocumentSymbolParams }

TDocumentSymbolParams = class(TLSPStreamable)
Expand Down
8 changes: 8 additions & 0 deletions src/serverprotocol/PasLS.General.pas
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,14 @@ function TInitialize.Process(var Params : TLSPInitializeParams): TInitializeResu
ServerSettings.Assign(Params.initializationOptions);
PasLS.Settings.ClientInfo.Assign(Params.ClientInfo);

// Detect hierarchical document symbol support
if Assigned(Params.capabilities) and
Assigned(Params.capabilities.textDocument) and
Assigned(Params.capabilities.textDocument.documentSymbol) then
SetClientCapabilities(Params.capabilities.textDocument.documentSymbol.hierarchicalDocumentSymbolSupport)
else
SetClientCapabilities(false);

// replace macros in server settings
Macros.Add('tmpdir', GetTempDir(true));
Macros.Add('root', URIToPath(Params.rootUri));
Expand Down
Loading