> 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?

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.

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" : "..."
      }
    ]
  }
}

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
    }
  }
}

Regards,
        Ryan Joseph

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to