On Thu, 23 Apr 2020 20:45:58 +0700 Ryan Joseph via fpc-pascal <fpc-pascal@lists.freepascal.org> wrote:
> > On Apr 23, 2020, at 8:20 PM, Arjan Adriaanse <ar...@adriaan.se> > > wrote: > > > > Perhaps not all the used generics features are available yet in > > older FPC versions. I use the most recent release candidate from > > ftp://ftp.freepascal.org/pub/fpc/beta/3.2.0-rc1/ [2], but will > > investigate if older versions also work. > > Lazbuild used FPC 3.0.4. How do I make lazbuild choose the trunk > instead of 3.0.4? Help: lazbuild -h lazbuild --compiler=/usr/lib/fpc/3.3.1/ppcx64 > The first thing to address is TCompletion.Process and how it > interacts with code tools. For example: > > URI := ParseURI(textDocument.uri); > Code := CodeToolBoss.FindFile(URI.Path + URI.Document); > X := position.character; > Y := position.line; > Line := Code.GetLine(Y); > GetIdentStartEndAtPosition(Line, X + 1, PStart, PEnd); > CodeToolBoss.IdentifierList.Prefix := Copy(Line, PStart, PEnd - > PStart); > > How LSP is intended to work is that a text buffer which contains the > current state of the file is sent to the server and then this buffer > is parsed. I think what the code above does is only operate on the > file on disk. This maybe be fine for certain completions but it will > be static until the user saves the file in the client. Worse yet is > that the text offset we receive from the client is going to be out of > sync. Codetools checks used files and automatically reloads them. > Here's an example request: > > { > "method" : "textDocument/didChange", > "jsonrpc" : "2.0", > "params" : { > "textDocument" : { > "uri" : > "file:///Users/ryanjoseph/Desktop/FPCLS-Test/parser_test.pas", > "version" : 1 }, > "contentChanges" : [ > { > "text" : "..." > } > ] > } > } If LSP updates parser_test.pas, then codetools will notice. If LSP only sends changes, then you have to apply these changes to codetools codebuffers: Code.Insert/Delete/Replace/Move Modified codebuffers are not auto updated from disk, until you Revert or Save. > and a hover request which shows the problem. Line 10 is from the > didChange request, not line 10 from the file on disk. > > { > "method" : "textDocument/hover", > "jsonrpc" : "2.0", > "id" : 3, > "params" : { > "textDocument" : { > "uri" : > "file:///Users/ryanjoseph/Desktop/FPCLS-Test/parser_test.pas" }, > "position" : { > "line" : 10, > "character" : 13 > } > } > } Mattias _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal