Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Neovim: Autocompletion not working if not on the start of the line #891

Closed
quantum-booty opened this issue Mar 12, 2022 · 12 comments · Fixed by #892
Closed

Neovim: Autocompletion not working if not on the start of the line #891

quantum-booty opened this issue Mar 12, 2022 · 12 comments · Fixed by #892

Comments

@quantum-booty
Copy link

This issue was originally submitted in the ionide plugin for vim, but I think the problem is with FsAutoComplete. see here

Completion works if I type from the beginning of the line.
image

But if there is anything before my cursor, autocompletion does not work.
image

I also see error when starting a new line in a function block:
image

** Environmen:
OS: Archlinux
Vim / Neovim version: NVIM v0.7.0-dev+1241-g08d9d74fd
dotnet SDK version: 6.0.102
mono / .Net Framework version: 6.0.102

Here is my Neovim configuration to setup the lsp:

local map = require('utils').map
local opts = { noremap=true, silent=true }

vim.opt.updatetime = 250
vim.opt.completeopt:append({'menuone','noselect','noinsert'})
vim.opt.completeopt:remove('preview')
vim.opt.shortmess:append('c')


local nvim_lsp = require('lspconfig')
local on_attach = function(client, bufnr)
    local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end
    local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end
    buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc')

    buf_set_keymap('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts)
    buf_set_keymap('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
    buf_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
    buf_set_keymap('n', '<leader>gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
    buf_set_keymap('n', '<space>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts)

    buf_set_keymap('n', 'gn', '<cmd>lua vim.diagnostic.goto_next()<CR>', opts)
    buf_set_keymap('n', 'gp', '<cmd>lua vim.diagnostic.goto_prev()<CR>', opts)

    buf_set_keymap('n', '<tab>', '<cmd>lua vim.lsp.buf.hover({border = "single"})<CR>', opts)
    buf_set_keymap('n', '<leader>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
    buf_set_keymap('n', '<leader>rr', '<cmd>LspRestart<CR>', opts)
    buf_set_keymap('n', '<leader>=', '<cmd>set ff=unix<cr><cmd>lua vim.lsp.buf.formatting_sync()<CR>', opts)

    buf_set_keymap('n', '<LeftMouse>', '<LeftMouse><cmd>lua vim.lsp.buf.hover({border = "single"})<CR>', opts)
    buf_set_keymap('n', '<RightMouse>', '<LeftMouse><cmd>lua vim.lsp.buf.definition()<CR>', opts)

end

capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities())

vim.cmd([[
let g:fsharp#lsp_auto_setup = 0
let g:fsharp#exclude_project_directories = ['paket-files']
]])
require'ionide'.setup{ capabilities = capabilities, on_attach = on_attach}
@baronfel
Copy link
Contributor

Thanks for reporting, I've repro'd in VSCode.

This error is caused by a classic off-by-one error in the textDocument/completions handler here. This older code is doing manual string extraction and bounds-checks instead of using some of the more recent ISourceText-based APIs that we have made specifically to sidestep these kinds of problems. Should be a quick fix, then I'll release a hotfix.

@quantum-booty
Copy link
Author

quantum-booty commented Mar 12, 2022

@baronfel I did dotnet tool update --global fsautocomplete, but I am still experiencing the same behaviour. No completion if there is something before cursor, and no completion inside function block.

This is the FSAC version that neovim sees
image

@baronfel
Copy link
Contributor

That version should be correct - with that same version in Ionide I cannot reproduce any issue you've reported here :-/

@quantum-booty
Copy link
Author

@baronfel I am getting this error in funcion
image

@baronfel
Copy link
Contributor

Can you get the raw LSP call for the textDocument/completion call being sent for this file?

@quantum-booty
Copy link
Author

here I tried to type: set a = pr

[START][2022-03-12 20:24:18] LSP logging initiated
[INFO][2022-03-12 20:24:18] .../vim/lsp/rpc.lua:261	"Starting RPC client"	{  args = { "--background-service-enabled" },  cmd = "fsautocomplete",  extra = {    cwd = "/home/henryw/Documents/Projects/F#/quicksort",    env = {      DOTNET_ROLL_FORWARD = "LatestMajor"    }  }}
[DEBUG][2022-03-12 20:24:18] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 1,  jsonrpc = "2.0",  method = "initialize",  params = {    capabilities = {      callHierarchy = {        dynamicRegistration = false      },      textDocument = {        codeAction = {          codeActionLiteralSupport = {            codeActionKind = {              valueSet = { "", "Empty", "QuickFix", "Refactor", "RefactorExtract", "RefactorInline", "RefactorRewrite", "Source", "SourceOrganizeImports", "quickfix", "refactor", "refactor.extract", "refactor.inline", "refactor.rewrite", "source", "source.organizeImports" }            }          },          dataSupport = true,          dynamicRegistration = false,          resolveSupport = {            properties = { "edit" }          }        },        completion = {          completionItem = {            commitCharactersSupport = true,            deprecatedSupport = true,            documentationFormat = { "markdown", "plaintext" },            insertReplaceSupport = true,            labelDetailsSupport = true,            preselectSupport = true,            resolveSupport = {              properties = { "documentation", "detail", "additionalTextEdits" }            },            snippetSupport = true,            tagSupport = {              valueSet = { 1 }            }          },          completionItemKind = {            valueSet = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 }          },          contextSupport = false,          dynamicRegistration = false        },        declaration = {          linkSupport = true        },        definition = {          linkSupport = true        },        documentHighlight = {          dynamicRegistration = false        },        documentSymbol = {          dynamicRegistration = false,          hierarchicalDocumentSymbolSupport = true,          symbolKind = {            valueSet = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 }          }        },        hover = {          contentFormat = { "markdown", "plaintext" },          dynamicRegistration = false        },        implementation = {          linkSupport = true        },        publishDiagnostics = {          relatedInformation = true,          tagSupport = {            valueSet = { 1, 2 }          }        },        references = {          dynamicRegistration = false        },        rename = {          dynamicRegistration = false,          prepareSupport = true        },        signatureHelp = {          dynamicRegistration = false,          signatureInformation = {            activeParameterSupport = true,            documentationFormat = { "markdown", "plaintext" },            parameterInformation = {              labelOffsetSupport = true            }          }        },        synchronization = {          didSave = true,          dynamicRegistration = false,          willSave = false,          willSaveWaitUntil = false        },        typeDefinition = {          linkSupport = true        }      },      window = {        showDocument = {          support = false        },        showMessage = {          messageActionItem = {            additionalPropertiesSupport = false          }        },        workDoneProgress = true      },      workspace = {        applyEdit = true,        configuration = true,        symbol = {          dynamicRegistration = false,          hierarchicalWorkspaceSymbolSupport = true,          symbolKind = {            valueSet = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 }          }        },        workspaceEdit = {          resourceOperations = { "rename", "create", "delete" }        },        workspaceFolders = true      }    },    clientInfo = {      name = "Neovim",      version = "0.7.0"    },    initializationOptions = {      AutomaticWorkspaceInit = true    },    processId = 9840,    rootPath = "/home/henryw/Documents/Projects/F#/quicksort",    rootUri = "file:///home/henryw/Documents/Projects/F%23/quicksort",    trace = "off",    workspaceFolders = { {        name = "/home/henryw/Documents/Projects/F#/quicksort",        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort"      } }  }}
[DEBUG][2022-03-12 20:24:19] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "fsharp/notifyWorkspacePeek",  params = {    content = '{"Kind":"workspacePeek","Data":{"Found":[{"Type":"directory","Data":{"Directory":"/home/henryw/Documents/Projects/F#/quicksort","Fsprojs":["/home/henryw/Documents/Projects/F#/quicksort/quicksort.fsproj"]}}]}}'  }}
[DEBUG][2022-03-12 20:24:19] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 1,  jsonrpc = "2.0",  result = {    capabilities = {      codeActionProvider = vim.empty_dict(),      codeLensProvider = {        resolveProvider = true      },      completionProvider = {        resolveProvider = true,        triggerCharacters = { ".", "'" }      },      definitionProvider = true,      documentFormattingProvider = true,      documentHighlightProvider = true,      documentRangeFormattingProvider = false,      documentSymbolProvider = true,      foldingRangeProvider = true,      hoverProvider = true,      implementationProvider = true,      referencesProvider = true,      renameProvider = true,      selectionRangeProvider = true,      semanticTokensProvider = {        full = true,        legend = {          tokenModifiers = { "declaration", "definition", "readonly", "static", "deprecated", "abstract", "async", "modification", "documentation", "defaultLibrary", "mutable", "disposable" },          tokenTypes = { "namespace", "type", "class", "enum", "interface", "struct", "typeParameter", "parameter", "variable", "property", "enumMember", "event", "function", "method", "macro", "keyword", "modifier", "comment", "string", "number", "regexp", "operator", "member", "cexpr", "text" }        },        range = true      },      signatureHelpProvider = {        retriggerCharacters = { ",", ")", " " },        triggerCharacters = { "(", ",", " " }      },      textDocumentSync = {        change = 1,        openClose = true,        save = {          includeText = true        }      },      typeDefinitionProvider = true,      workspaceSymbolProvider = true    }  }}
[DEBUG][2022-03-12 20:24:19] .../vim/lsp/rpc.lua:347	"rpc.send"	{  jsonrpc = "2.0",  method = "initialized",  params = vim.empty_dict()}
[DEBUG][2022-03-12 20:24:19] .../lua/vim/lsp.lua:982	"LSP[ionide]"	"server_capabilities"	{  codeActionProvider = vim.empty_dict(),  codeLensProvider = {    resolveProvider = true  },  completionProvider = {    resolveProvider = true,    triggerCharacters = { ".", "'" }  },  definitionProvider = true,  documentFormattingProvider = true,  documentHighlightProvider = true,  documentRangeFormattingProvider = false,  documentSymbolProvider = true,  foldingRangeProvider = true,  hoverProvider = true,  implementationProvider = true,  referencesProvider = true,  renameProvider = true,  selectionRangeProvider = true,  semanticTokensProvider = {    full = true,    legend = {      tokenModifiers = { "declaration", "definition", "readonly", "static", "deprecated", "abstract", "async", "modification", "documentation", "defaultLibrary", "mutable", "disposable" },      tokenTypes = { "namespace", "type", "class", "enum", "interface", "struct", "typeParameter", "parameter", "variable", "property", "enumMember", "event", "function", "method", "macro", "keyword", "modifier", "comment", "string", "number", "regexp", "operator", "member", "cexpr", "text" }    },    range = true  },  signatureHelpProvider = {    retriggerCharacters = { ",", ")", " " },    triggerCharacters = { "(", ",", " " }  },  textDocumentSync = {    change = 1,    openClose = true,    save = {      includeText = true    }  },  typeDefinitionProvider = true,  workspaceSymbolProvider = true}
[INFO][2022-03-12 20:24:19] .../lua/vim/lsp.lua:983	"LSP[ionide]"	"initialized"	{  resolved_capabilities = {    call_hierarchy = false,    code_action = vim.empty_dict(),    code_lens = true,    code_lens_resolve = true,    completion = true,    declaration = false,    document_formatting = true,    document_highlight = true,    document_range_formatting = false,    document_symbol = true,    execute_command = false,    find_references = true,    goto_definition = true,    hover = true,    implementation = true,    rename = true,    signature_help = true,    signature_help_trigger_characters = { "(", ",", " " },    text_document_did_change = 1,    text_document_open_close = true,    text_document_save = {      includeText = true    },    text_document_save_include_text = true,    text_document_will_save = false,    text_document_will_save_wait_until = false,    type_definition = true,    workspace_folder_properties = {      changeNotifications = false,      supported = false    },    workspace_symbol = true  }}
[DEBUG][2022-03-12 20:24:19] .../vim/lsp/rpc.lua:347	"rpc.send"	{  jsonrpc = "2.0",  method = "textDocument/didOpen",  params = {    textDocument = {      languageId = "fsharp",      text = 'let rec quicksort l =\r\n    match l with\r\n    | [] -> [] // if the list is empty\r\n    | firstElem :: otherElements -> // if the list is not empty,\r\n        let smallerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e < firstElem)\r\n            |> quicksort\r\n\r\n        let largerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e >= firstElem)\r\n            |> quicksort\r\n\r\n        List.concat [ smallerElements\r\n                      [ firstElem ]\r\n                      largerElements ]\r\n\r\n\r\nlet ric quicksort2 =\r\n    function\r\n    | [] -> []\r\n    | first :: rest ->\r\n        let smaller, larger = List.partition ((>=) first) rest\r\n\r\n        List.concat [ quicksort2 smaller\r\n                      [ first ]\r\n                      quicksort2 larger ]\r\n\r\nprintfn "%A" (quicksort [ 1; 5; 23; 18; 9; 1; 3 ])\r\n\r\n',      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs",      version = 0    }  }}
[DEBUG][2022-03-12 20:24:19] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "fsharp/notifyWorkspace",  params = {    content = '{"Kind":"workspaceLoad","Data":{"Status":"started"}}'  }}
[DEBUG][2022-03-12 20:24:19] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "fsharp/notifyWorkspace",  params = {    content = '{"Kind":"projectLoading","Data":{"Project":"/home/henryw/Documents/Projects/F#/quicksort/quicksort.fsproj"}}'  }}
[DEBUG][2022-03-12 20:24:19] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "fsharp/notifyWorkspace",  params = {    content = '{"Kind":"project","Data":{"Project":"/home/henryw/Documents/Projects/F#/quicksort/quicksort.fsproj","Files":["/home/henryw/Documents/Projects/F#/quicksort/Program.fs"],"Output":"/home/henryw/Documents/Projects/F#/quicksort/bin/Debug/net6.0/quicksort.dll","ProjectReferences":[],"PackageReferences":[{"Name":"FSharp.Core","Version":"6.0.1","FullPath":"/home/henryw/.nuget/packages/fsharp.core/6.0.1/lib/netstandard2.1/FSharp.Core.dll"}],"References":["/home/henryw/.nuget/packages/fsharp.core/6.0.1/lib/netstandard2.1/FSharp.Core.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/Microsoft.CSharp.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/Microsoft.VisualBasic.Core.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/Microsoft.VisualBasic.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/Microsoft.Win32.Primitives.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/Microsoft.Win32.Registry.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.AppContext.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Buffers.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Collections.Concurrent.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Collections.Immutable.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Collections.NonGeneric.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Collections.Specialized.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Collections.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.ComponentModel.Annotations.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.ComponentModel.DataAnnotations.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.ComponentModel.EventBasedAsync.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.ComponentModel.Primitives.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.ComponentModel.TypeConverter.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.ComponentModel.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Configuration.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Console.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Core.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Data.Common.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Data.DataSetExtensions.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Data.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Diagnostics.Contracts.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Diagnostics.Debug.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Diagnostics.DiagnosticSource.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Diagnostics.FileVersionInfo.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Diagnostics.Process.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Diagnostics.StackTrace.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Diagnostics.TextWriterTraceListener.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Diagnostics.Tools.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Diagnostics.TraceSource.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Diagnostics.Tracing.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Drawing.Primitives.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Drawing.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Dynamic.Runtime.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Formats.Asn1.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Globalization.Calendars.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Globalization.Extensions.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Globalization.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.IO.Compression.Brotli.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.IO.Compression.FileSystem.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.IO.Compression.ZipFile.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.IO.Compression.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.IO.FileSystem.AccessControl.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.IO.FileSystem.DriveInfo.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.IO.FileSystem.Primitives.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.IO.FileSystem.Watcher.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.IO.FileSystem.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.IO.IsolatedStorage.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.IO.MemoryMappedFiles.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.IO.Pipes.AccessControl.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.IO.Pipes.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.IO.UnmanagedMemoryStream.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.IO.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Linq.Expressions.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Linq.Parallel.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Linq.Queryable.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Linq.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Memory.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Net.Http.Json.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Net.Http.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Net.HttpListener.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Net.Mail.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Net.NameResolution.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Net.NetworkInformation.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Net.Ping.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Net.Primitives.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Net.Requests.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Net.Security.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Net.ServicePoint.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Net.Sockets.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Net.WebClient.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Net.WebHeaderCollection.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Net.WebProxy.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Net.WebSockets.Client.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Net.WebSockets.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Net.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Numerics.Vectors.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Numerics.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.ObjectModel.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Reflection.DispatchProxy.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Reflection.Emit.ILGeneration.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Reflection.Emit.Lightweight.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Reflection.Emit.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Reflection.Extensions.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Reflection.Metadata.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Reflection.Primitives.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Reflection.TypeExtensions.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Reflection.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Resources.Reader.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Resources.ResourceManager.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Resources.Writer.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Runtime.CompilerServices.Unsafe.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Runtime.CompilerServices.VisualC.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Runtime.Extensions.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Runtime.Handles.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Runtime.InteropServices.RuntimeInformation.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Runtime.InteropServices.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Runtime.Intrinsics.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Runtime.Loader.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Runtime.Numerics.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Runtime.Serialization.Formatters.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Runtime.Serialization.Json.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Runtime.Serialization.Primitives.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Runtime.Serialization.Xml.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Runtime.Serialization.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Runtime.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Security.AccessControl.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Security.Claims.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Security.Cryptography.Algorithms.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Security.Cryptography.Cng.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Security.Cryptography.Csp.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Security.Cryptography.Encoding.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Security.Cryptography.OpenSsl.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Security.Cryptography.Primitives.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Security.Cryptography.X509Certificates.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Security.Principal.Windows.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Security.Principal.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Security.SecureString.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Security.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.ServiceModel.Web.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.ServiceProcess.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Text.Encoding.CodePages.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Text.Encoding.Extensions.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Text.Encoding.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Text.Encodings.Web.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Text.Json.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Text.RegularExpressions.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Threading.Channels.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Threading.Overlapped.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Threading.Tasks.Dataflow.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Threading.Tasks.Extensions.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Threading.Tasks.Parallel.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Threading.Tasks.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Threading.Thread.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Threading.ThreadPool.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Threading.Timer.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Threading.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Transactions.Local.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Transactions.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.ValueTuple.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Web.HttpUtility.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Web.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Windows.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Xml.Linq.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Xml.ReaderWriter.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Xml.Serialization.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Xml.XDocument.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Xml.XPath.XDocument.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Xml.XPath.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Xml.XmlDocument.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Xml.XmlSerializer.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.Xml.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/System.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/WindowsBase.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/mscorlib.dll","/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.2/ref/net6.0/netstandard.dll"],"OutputType":"exe","Info":{"IsTestProject":false,"Configuration":"Debug","IsPackable":true,"TargetFramework":"net6.0","TargetFrameworkIdentifier":".NETCoreApp","TargetFrameworkVersion":"v6.0","RestoreSuccess":true,"TargetFrameworks":[],"RunCmd":{"Command":"/home/henryw/Documents/Projects/F#/quicksort/bin/Debug/net6.0/quicksort","Arguments":""},"IsPublishable":true},"Items":[{"Name":"Compile","FilePath":"/home/henryw/Documents/Projects/F#/quicksort/Program.fs","VirtualPath":"Program.fs","Metadata":{}}],"AdditionalInfo":{}}}'  }}
[DEBUG][2022-03-12 20:24:19] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "fsharp/notifyWorkspace",  params = {    content = '{"Kind":"workspaceLoad","Data":{"Status":"finished"}}'  }}
[DEBUG][2022-03-12 20:24:24] .../vim/lsp/rpc.lua:347	"rpc.send"	{  jsonrpc = "2.0",  method = "textDocument/didChange",  params = {    contentChanges = { {        text = 'let rec quicksort l =\r\n    match l with\r\n    | [] -> [] // if the list is empty\r\n    | firstElem :: otherElements -> // if the list is not empty,\r\n        let smallerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e < firstElem)\r\n            |> quicksort\r\n\r\n        let largerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e >= firstElem)\r\n            |> quicksort\r\n\r\n        List.concat [ smallerElements\r\n                      [ firstElem ]\r\n                      largerElements ]\r\n\r\n\r\nlet ric quicksort2 =\r\n    function\r\n    | [] -> []\r\n    | first :: rest ->\r\n        let smaller, larger = List.partition ((>=) first) rest\r\n\r\n        List.concat [ quicksort2 smaller\r\n                      [ first ]\r\n                      quicksort2 larger ]\r\n\r\nprintfn "%A" (quicksort [ 1; 5; 23; 18; 9; 1; 3 ])\r\nl\r\n'      } },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs",      version = 4    }  }}
[DEBUG][2022-03-12 20:24:24] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/completion"	{  context = {    triggerKind = 1  },  position = {    character = 1,    line = 30  },  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:24:24] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 2,  jsonrpc = "2.0",  method = "textDocument/completion",  params = {    context = {      triggerKind = 1    },    position = {      character = 1,      line = 30    },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:24:25] .../vim/lsp/rpc.lua:347	"rpc.send"	{  jsonrpc = "2.0",  method = "textDocument/didChange",  params = {    contentChanges = { {        text = 'let rec quicksort l =\r\n    match l with\r\n    | [] -> [] // if the list is empty\r\n    | firstElem :: otherElements -> // if the list is not empty,\r\n        let smallerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e < firstElem)\r\n            |> quicksort\r\n\r\n        let largerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e >= firstElem)\r\n            |> quicksort\r\n\r\n        List.concat [ smallerElements\r\n                      [ firstElem ]\r\n                      largerElements ]\r\n\r\n\r\nlet ric quicksort2 =\r\n    function\r\n    | [] -> []\r\n    | first :: rest ->\r\n        let smaller, larger = List.partition ((>=) first) rest\r\n\r\n        List.concat [ quicksort2 smaller\r\n                      [ first ]\r\n                      quicksort2 larger ]\r\n\r\nprintfn "%A" (quicksort [ 1; 5; 23; 18; 9; 1; 3 ])\r\nle\r\n'      } },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs",      version = 5    }  }}
[DEBUG][2022-03-12 20:24:25] .../vim/lsp/rpc.lua:347	"rpc.send"	{  jsonrpc = "2.0",  method = "textDocument/didChange",  params = {    contentChanges = { {        text = 'let rec quicksort l =\r\n    match l with\r\n    | [] -> [] // if the list is empty\r\n    | firstElem :: otherElements -> // if the list is not empty,\r\n        let smallerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e < firstElem)\r\n            |> quicksort\r\n\r\n        let largerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e >= firstElem)\r\n            |> quicksort\r\n\r\n        List.concat [ smallerElements\r\n                      [ firstElem ]\r\n                      largerElements ]\r\n\r\n\r\nlet ric quicksort2 =\r\n    function\r\n    | [] -> []\r\n    | first :: rest ->\r\n        let smaller, larger = List.partition ((>=) first) rest\r\n\r\n        List.concat [ quicksort2 smaller\r\n                      [ first ]\r\n                      quicksort2 larger ]\r\n\r\nprintfn "%A" (quicksort [ 1; 5; 23; 18; 9; 1; 3 ])\r\nlet\r\n'      } },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs",      version = 6    }  }}
[DEBUG][2022-03-12 20:24:25] .../vim/lsp/rpc.lua:347	"rpc.send"	{  jsonrpc = "2.0",  method = "$/cancelRequest",  params = {    id = 2  }}
[DEBUG][2022-03-12 20:24:25] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/completion"	{  context = {    triggerKind = 1  },  position = {    character = 3,    line = 30  },  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:24:25] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 3,  jsonrpc = "2.0",  method = "textDocument/completion",  params = {    context = {      triggerKind = 1    },    position = {      character = 3,      line = 30    },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:24:26] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "fsharp/fileParsed",  params = {    content = "/home/henryw/Documents/Projects/F#/quicksort/Program.fs"  }}
[DEBUG][2022-03-12 20:24:26] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "textDocument/publishDiagnostics",  params = {    diagnostics = { {        code = "10",        codeDescription = {          href = "https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/compiler-messages/fs0010"        },        debuggerDisplay = "[Error] ((31,0)-(31,0)) Incomplete structured construct at or before this point in binding (10)",        message = "Incomplete structured construct at or before this point in binding",        range = {          debuggerDisplay = "(31,0)-(31,0)",          end = {            character = 0,            debuggerDisplay = "(31,0)",            line = 31          },          start = {            character = 0,            debuggerDisplay = "(31,0)",            line = 31          }        },        relatedInformation = {},        severity = 1,        source = "F# Compiler"      } },    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}
[DEBUG][2022-03-12 20:24:26] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/documentSymbol"	{  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:24:26] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 4,  jsonrpc = "2.0",  method = "textDocument/documentSymbol",  params = {    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:24:26] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 3,  jsonrpc = "2.0",  result = {    isIncomplete = false,    items = {}  }}
[DEBUG][2022-03-12 20:24:26] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 4,  jsonrpc = "2.0",  result = { {      kind = 2,      location = {        range = {          debuggerDisplay = "(0,0)-(31,0)",          end = {            character = 0,            debuggerDisplay = "(31,0)",            line = 31          },          start = {            character = 0,            debuggerDisplay = "(0,0)",            line = 0          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "Program"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(0,8)-(16,38)",          end = {            character = 38,            debuggerDisplay = "(16,38)",            line = 16          },          start = {            character = 8,            debuggerDisplay = "(0,8)",            line = 0          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "quicksort"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(19,4)-(27,41)",          end = {            character = 41,            debuggerDisplay = "(27,41)",            line = 27          },          start = {            character = 4,            debuggerDisplay = "(19,4)",            line = 19          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "ric"    } }}
[DEBUG][2022-03-12 20:24:26] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 2,  jsonrpc = "2.0",  result = {    isIncomplete = false,    items = { {        filterText = "async",        insertText = "async",        kind = 6,        label = "async",        sortText = "000000"      }, {        filterText = "backgroundTask",        insertText = "backgroundTask",        kind = 6,        label = "backgroundTask",        sortText = "000001"      }, {        filterText = "infinity",        insertText = "infinity",        kind = 6,        label = "infinity",        sortText = "000002"      }, {        filterText = "infinityf",        insertText = "infinityf",        kind = 6,        label = "infinityf",        sortText = "000003"      }, {        filterText = "nan",        insertText = "nan",        kind = 6,        label = "nan",        sortText = "000004"      }, {        filterText = "nanf",        insertText = "nanf",        kind = 6,        label = "nanf",        sortText = "000005"      }, {        filterText = "query",        insertText = "query",        kind = 6,        label = "query",        sortText = "000006"      }, {        filterText = "sizeof",        insertText = "sizeof",        kind = 6,        label = "sizeof",        sortText = "000007"      }, {        filterText = "stderr",        insertText = "stderr",        kind = 6,        label = "stderr",        sortText = "000008"      }, {        filterText = "stdin",        insertText = "stdin",        kind = 6,        label = "stdin",        sortText = "000009"      }, {        filterText = "stdout",        insertText = "stdout",        kind = 6,        label = "stdout",        sortText = "000010"      }, {        filterText = "task",        insertText = "task",        kind = 6,        label = "task",        sortText = "000011"      }, {        filterText = "typedefof",        insertText = "typedefof",        kind = 6,        label = "typedefof",        sortText = "000012"      }, {        filterText = "typeof",        insertText = "typeof",        kind = 6,        label = "typeof",        sortText = "000013"      }, {        filterText = "abs",        insertText = "abs",        kind = 2,        label = "abs",        sortText = "000014"      }, {        filterText = "acos",        insertText = "acos",        kind = 2,        label = "acos",        sortText = "000015"      }, {        filterText = "array2D",        insertText = "array2D",        kind = 2,        label = "array2D",        sortText = "000016"      }, {        filterText = "asin",        insertText = "asin",        kind = 2,        label = "asin",        sortText = "000017"      }, {        filterText = "atan",        insertText = "atan",        kind = 2,        label = "atan",        sortText = "000018"      }, {        filterText = "atan2",        insertText = "atan2",        kind = 2,        label = "atan2",        sortText = "000019"      }, {        filterText = "box",        insertText = "box",        kind = 2,        label = "box",        sortText = "000020"      }, {        filterText = "byte",        insertText = "byte",        kind = 2,        label = "byte",        sortText = "000021"      }, {        filterText = "ceil",        insertText = "ceil",        kind = 2,        label = "ceil",        sortText = "000022"      }, {        filterText = "char",        insertText = "char",        kind = 2,        label = "char",        sortText = "000023"      }, {        filterText = "compare",        insertText = "compare",        kind = 2,        label = "compare",        sortText = "000024"      }, {        filterText = "cos",        insertText = "cos",        kind = 2,        label = "cos",        sortText = "000025"      }, {        filterText = "cosh",        insertText = "cosh",        kind = 2,        label = "cosh",        sortText = "000026"      }, {        filterText = "decimal",        insertText = "decimal",        kind = 2,        label = "decimal",        sortText = "000027"      }, {        filterText = "decr",        insertText = "decr",        kind = 2,        label = "decr",        sortText = "000028"      }, {        filterText = "defaultArg",        insertText = "defaultArg",        kind = 2,        label = "defaultArg",        sortText = "000029"      }, {        filterText = "defaultValueArg",        insertText = "defaultValueArg",        kind = 2,        label = "defaultValueArg",        sortText = "000030"      }, {        filterText = "dict",        insertText = "dict",        kind = 2,        label = "dict",        sortText = "000031"      }, {        filterText = "double",        insertText = "double",        kind = 2,        label = "double",        sortText = "000032"      }, {        filterText = "enum",        insertText = "enum",        kind = 2,        label = "enum",        sortText = "000033"      }, {        filterText = "eprintf",        insertText = "eprintf",        kind = 2,        label = "eprintf",        sortText = "000034"      }, {        filterText = "eprintfn",        insertText = "eprintfn",        kind = 2,        label = "eprintfn",        sortText = "000035"      }, {        filterText = "exit",        insertText = "exit",        kind = 2,        label = "exit",        sortText = "000036"      }, {        filterText = "exp",        insertText = "exp",        kind = 2,        label = "exp",        sortText = "000037"      }, {        filterText = "Failure",        insertText = "Failure",        kind = 2,        label = "Failure",        sortText = "000038"      }, {        filterText = "failwith",        insertText = "failwith",        kind = 2,        label = "failwith",        sortText = "000039"      }, {        filterText = "failwithf",        insertText = "failwithf",        kind = 2,        label = "failwithf",        sortText = "000040"      }, {        filterText = "float",        insertText = "float",        kind = 2,        label = "float",        sortText = "000041"      }, {        filterText = "float32",        insertText = "float32",        kind = 2,        label = "float32",        sortText = "000042"      }, {        filterText = "floor",        insertText = "floor",        kind = 2,        label = "floor",        sortText = "000043"      }, {        filterText = "fprintf",        insertText = "fprintf",        kind = 2,        label = "fprintf",        sortText = "000044"      }, {        filterText = "fprintfn",        insertText = "fprintfn",        kind = 2,        label = "fprintfn",        sortText = "000045"      }, {        filterText = "fst",        insertText = "fst",        kind = 2,        label = "fst",        sortText = "000046"      }, {        filterText = "hash",        insertText = "hash",        kind = 2,        label = "hash",        sortText = "000047"      }, {        filterText = "id",        insertText = "id",        kind = 2,        label = "id",        sortText = "000048"      }, {        filterText = "ignore",        insertText = "ignore",        kind = 2,        label = "ignore",        sortText = "000049"      }, {        filterText = "incr",        insertText = "incr",        kind = 2,        label = "incr",        sortText = "000050"      }, {        filterText = "int",        insertText = "int",        kind = 2,        label = "int",        sortText = "000051"      }, {        filterText = "int16",        insertText = "int16",        kind = 2,        label = "int16",        sortText = "000052"      }, {        filterText = "int32",        insertText = "int32",        kind = 2,        label = "int32",        sortText = "000053"      }, {        filterText = "int64",        insertText = "int64",        kind = 2,        label = "int64",        sortText = "000054"      }, {        filterText = "int8",        insertText = "int8",        kind = 2,        label = "int8",        sortText = "000055"      }, {        filterText = "invalidArg",        insertText = "invalidArg",        kind = 2,        label = "invalidArg",        sortText = "000056"      }, {        filterText = "invalidOp",        insertText = "invalidOp",        kind = 2,        label = "invalidOp",        sortText = "000057"      }, {        filterText = "isNull",        insertText = "isNull",        kind = 2,        label = "isNull",        sortText = "000058"      }, {        filterText = "limitedHash",        insertText = "limitedHash",        kind = 2,        label = "limitedHash",        sortText = "000059"      }, {        filterText = "lock",        insertText = "lock",        kind = 2,        label = "lock",        sortText = "000060"      }, {        filterText = "log",        insertText = "log",        kind = 2,        label = "log",        sortText = "000061"      }, {        filterText = "log10",        insertText = "log10",        kind = 2,        label = "log10",        sortText = "000062"      }, {        filterText = "max",        insertText = "max",        kind = 2,        label = "max",        sortText = "000063"      }, {        filterText = "min",        insertText = "min",        kind = 2,        label = "min",        sortText = "000064"      }, {        filterText = "nameof",        insertText = "nameof",        kind = 2,        label = "nameof",        sortText = "000065"      }, {        filterText = "nativeint",        insertText = "nativeint",        kind = 2,        label = "nativeint",        sortText = "000066"      }, {        filterText = "not",        insertText = "not",        kind = 2,        label = "not",        sortText = "000067"      }, {        filterText = "nullArg",        insertText = "nullArg",        kind = 2,        label = "nullArg",        sortText = "000068"      }, {        filterText = "pown",        insertText = "pown",        kind = 2,        label = "pown",        sortText = "000069"      }, {        filterText = "printf",        insertText = "printf",        kind = 2,        label = "printf",        sortText = "000070"      }, {        filterText = "printfn",        insertText = "printfn",        kind = 2,        label = "printfn",        sortText = "000071"      }, {        filterText = "quicksort",        insertText = "quicksort",        kind = 2,        label = "quicksort",        sortText = "000072"      }, {        filterText = "raise",        insertText = "raise",        kind = 2,        label = "raise",        sortText = "000073"      }, {        filterText = "readOnlyDict",        insertText = "readOnlyDict",        kind = 2,        label = "readOnlyDict",        sortText = "000074"      }, {        filterText = "ref",        insertText = "ref",        kind = 2,        label = "ref",        sortText = "000075"      }, {        filterText = "reraise",        insertText = "reraise",        kind = 2,        label = "reraise",        sortText = "000076"      }, {        filterText = "ric",        insertText = "ric",        kind = 2,        label = "ric",        sortText = "000077"      }, {        filterText = "round",        insertText = "round",        kind = 2,        label = "round",        sortText = "000078"      }, {        filterText = "sbyte",        insertText = "sbyte",        kind = 2,        label = "sbyte",        sortText = "000079"      }, {        filterText = "seq",        insertText = "seq",        kind = 2,        label = "seq",        sortText = "000080"      }, {        filterText = "set",        insertText = "set",        kind = 2,        label = "set",        sortText = "000081"      }, {        filterText = "sign",        insertText = "sign",        kind = 2,        label = "sign",        sortText = "000082"      }, {        filterText = "sin",        insertText = "sin",        kind = 2,        label = "sin",        sortText = "000083"      }, {        filterText = "single",        insertText = "single",        kind = 2,        label = "single",        sortText = "000084"      }, {        filterText = "sinh",        insertText = "sinh",        kind = 2,        label = "sinh",        sortText = "000085"      }, {        filterText = "snd",        insertText = "snd",        kind = 2,        label = "snd",        sortText = "000086"      }, {        filterText = "sprintf",        insertText = "sprintf",        kind = 2,        label = "sprintf",        sortText = "000087"      }, {        filterText = "sqrt",        insertText = "sqrt",        kind = 2,        label = "sqrt",        sortText = "000088"      }, {        filterText = "string",        insertText = "string",        kind = 2,        label = "string",        sortText = "000089"      }, {        filterText = "tan",        insertText = "tan",        kind = 2,        label = "tan",        sortText = "000090"      }, {        filterText = "tanh",        insertText = "tanh",        kind = 2,        label = "tanh",        sortText = "000091"      }, {        filterText = "truncate",        insertText = "truncate",        kind = 2,        label = "truncate",        sortText = "000092"      }, {        filterText = "tryUnbox",        insertText = "tryUnbox",        kind = 2,        label = "tryUnbox",        sortText = "000093"      }, {        filterText = "uint",        insertText = "uint",        kind = 2,        label = "uint",        sortText = "000094"      }, {        filterText = "uint16",        insertText = "uint16",        kind = 2,        label = "uint16",        sortText = "000095"      }, {        filterText = "uint32",        insertText = "uint32",        kind = 2,        label = "uint32",        sortText = "000096"      }, {        filterText = "uint64",        insertText = "uint64",        kind = 2,        label = "uint64",        sortText = "000097"      }, {        filterText = "uint8",        insertText = "uint8",        kind = 2,        label = "uint8",        sortText = "000098"      }, {        filterText = "unativeint",        insertText = "unativeint",        kind = 2,        label = "unativeint",        sortText = "000099"      }, {        filterText = "unbox",        insertText = "unbox",        kind = 2,        label = "unbox",        sortText = "000100"      }, {        filterText = "using",        insertText = "using",        kind = 2,        label = "using",        sortText = "000101"      }, {        filterText = "AbstractClassAttribute",        insertText = "AbstractClassAttribute",        kind = 7,        label = "AbstractClassAttribute",        sortText = "000102"      }, {        filterText = "AllowNullLiteralAttribute",        insertText = "AllowNullLiteralAttribute",        kind = 7,        label = "AllowNullLiteralAttribute",        sortText = "000103"      }, {        filterText = "Array",        insertText = "Array",        kind = 9,        label = "Array",        sortText = "000104"      }, {        filterText = "array",        insertText = "array",        kind = 7,        label = "array",        sortText = "000105"      }, {        filterText = "Array2D",        insertText = "Array2D",        kind = 9,        label = "Array2D",        sortText = "000106"      }, {        filterText = "Array3D",        insertText = "Array3D",        kind = 9,        label = "Array3D",        sortText = "000107"      }, {        filterText = "Array4D",        insertText = "Array4D",        kind = 9,        label = "Array4D",        sortText = "000108"      }, {        filterText = "ArrayExtensions",        insertText = "ArrayExtensions",        kind = 9,        label = "ArrayExtensions",        sortText = "000109"      }, {        filterText = "Async",        insertText = "Async",        kind = 7,        label = "Async",        sortText = "000110"      }, {        filterText = "AsyncActivation",        insertText = "AsyncActivation",        kind = 22,        label = "AsyncActivation",        sortText = "000111"      }, {        filterText = "AsyncBuilder",        insertText = "AsyncBuilder",        kind = 7,        label = "AsyncBuilder",        sortText = "000112"      }, {        filterText = "AsyncPrimitives",        insertText = "AsyncPrimitives",        kind = 9,        label = "AsyncPrimitives",        sortText = "000113"      }, {        filterText = "AsyncReplyChannel",        insertText = "AsyncReplyChannel",        kind = 7,        label = "AsyncReplyChannel",        sortText = "000114"      }, {        filterText = "AsyncReturn",        insertText = "AsyncReturn",        kind = 7,        label = "AsyncReturn",        sortText = "000115"      }, {        filterText = "AutoOpenAttribute",        insertText = "AutoOpenAttribute",        kind = 7,        label = "AutoOpenAttribute",        sortText = "000116"      }, {        filterText = "AutoSerializableAttribute",        insertText = "AutoSerializableAttribute",        kind = 7,        label = "AutoSerializableAttribute",        sortText = "000117"      }, {        filterText = "BackgroundTaskBuilder",        insertText = "BackgroundTaskBuilder",        kind = 7,        label = "BackgroundTaskBuilder",        sortText = "000118"      }, {        filterText = "bigint",        insertText = "bigint",        kind = 22,        label = "bigint",        sortText = "000119"      }, {        filterText = "bool",        insertText = "bool",        kind = 22,        label = "bool",        sortText = "000120"      }, {        filterText = "byref",        insertText = "byref",        kind = 7,        label = "byref",        sortText = "000121"      }, {        filterText = "Checked",        insertText = "Checked",        kind = 9,        label = "Checked",        sortText = "000122"      }, {        filterText = "Choice",        insertText = "Choice",        kind = 7,        label = "Choice",        sortText = "000123"      }, {        filterText = "Choice1Of2",        insertText = "Choice1Of2",        kind = 20,        label = "Choice1Of2",        sortText = "000124"      }, {        filterText = "Choice1Of3",        insertText = "Choice1Of3",        kind = 20,        label = "Choice1Of3",        sortText = "000125"      }, {        filterText = "Choice1Of4",        insertText = "Choice1Of4",        kind = 20,        label = "Choice1Of4",        sortText = "000126"      }, {        filterText = "Choice1Of5",        insertText = "Choice1Of5",        kind = 20,        label = "Choice1Of5",        sortText = "000127"      }, {        filterText = "Choice1Of6",        insertText = "Choice1Of6",        kind = 20,        label = "Choice1Of6",        sortText = "000128"      }, {        filterText = "Choice1Of7",        insertText = "Choice1Of7",        kind = 20,        label = "Choice1Of7",        sortText = "000129"      }, {        filterText = "Choice2Of2",        insertText = "Choice2Of2",        kind = 20,        label = "Choice2Of2",        sortText = "000130"      }, {        filterText = "Choice2Of3",        insertText = "Choice2Of3",        kind = 20,        label = "Choice2Of3",        sortText = "000131"      }, {        filterText = "Choice2Of4",        insertText = "Choice2Of4",        kind = 20,        label = "Choice2Of4",        sortText = "000132"      }, {        filterText = "Choice2Of5",        insertText = "Choice2Of5",        kind = 20,        label = "Choice2Of5",        sortText = "000133"      }, {        filterText = "Choice2Of6",        insertText = "Choice2Of6",        kind = 20,        label = "Choice2Of6",        sortText = "000134"      }, {        filterText = "Choice2Of7",        insertText = "Choice2Of7",        kind = 20,        label = "Choice2Of7",        sortText = "000135"      }, {        filterText = "Choice3Of3",        insertText = "Choice3Of3",        kind = 20,        label = "Choice3Of3",        sortText = "000136"      }, {        filterText = "Choice3Of4",        insertText = "Choice3Of4",        kind = 20,        label = "Choice3Of4",        sortText = "000137"      }, {        filterText = "Choice3Of5",        insertText = "Choice3Of5",        kind = 20,        label = "Choice3Of5",        sortText = "000138"      }, {        filterText = "Choice3Of6",        insertText = "Choice3Of6",        kind = 20,        label = "Choice3Of6",        sortText = "000139"      }, {        filterText = "Choice3Of7",        insertText = "Choice3Of7",        kind = 20,        label = "Choice3Of7",        sortText = "000140"      }, {        filterText = "Choice4Of4",        insertText = "Choice4Of4",        kind = 20,        label = "Choice4Of4",        sortText = "000141"      }, {        filterText = "Choice4Of5",        insertText = "Choice4Of5",        kind = 20,        label = "Choice4Of5",        sortText = "000142"      }, {        filterText = "Choice4Of6",        insertText = "Choice4Of6",        kind = 20,        label = "Choice4Of6",        sortText = "000143"      }, {        filterText = "Choice4Of7",        insertText = "Choice4Of7",        kind = 20,        label = "Choice4Of7",        sortText = "000144"      }, {        filterText = "Choice5Of5",        insertText = "Choice5Of5",        kind = 20,        label = "Choice5Of5",        sortText = "000145"      }, {        filterText = "Choice5Of6",        insertText = "Choice5Of6",        kind = 20,        label = "Choice5Of6",        sortText = "000146"      }, {        filterText = "Choice5Of7",        insertText = "Choice5Of7",        kind = 20,        label = "Choice5Of7",        sortText = "000147"      }, {        filterText = "Choice6Of6",        insertText = "Choice6Of6",        kind = 20,        label = "Choice6Of6",        sortText = "000148"      }, {        filterText = "Choice6Of7",        insertText = "Choice6Of7",        kind = 20,        label = "Choice6Of7",        sortText = "000149"      }, {        filterText = "Choice7Of7",        insertText = "Choice7Of7",        kind = 20,        label = "Choice7Of7",        sortText = "000150"      }, {        filterText = "ClassAttribute",        insertText = "ClassAttribute",        kind = 7,        label = "ClassAttribute",        sortText = "000151"      }, {        filterText = "CLIEventAttribute",        insertText = "CLIEventAttribute",        kind = 7,        label = "CLIEventAttribute",        sortText = "000152"      }, {        filterText = "CLIMutableAttribute",        insertText = "CLIMutableAttribute",        kind = 7,        label = "CLIMutableAttribute",        sortText = "000153"      }, {        filterText = "Collections",        insertText = "Collections",        kind = 9,        label = "Collections",        sortText = "000154"      }, {        filterText = "CommonExtensions",        insertText = "CommonExtensions",        kind = 9,        label = "CommonExtensions",        sortText = "000155"      }, {        filterText = "ComparisonConditionalOnAttribute",        insertText = "ComparisonConditionalOnAttribute",        kind = 7,        label = "ComparisonConditionalOnAttribute",        sortText = "000156"      }, {        filterText = "ComparisonIdentity",        insertText = "ComparisonIdentity",        kind = 9,        label = "ComparisonIdentity",        sortText = "000157"      }, {        filterText = "CompilationArgumentCountsAttribute",        insertText = "CompilationArgumentCountsAttribute",        kind = 7,        label = "CompilationArgumentCountsAttribute",        sortText = "000158"      }, {        filterText = "CompilationMappingAttribute",        insertText = "CompilationMappingAttribute",        kind = 7,        label = "CompilationMappingAttribute",        sortText = "000159"      }, {        filterText = "CompilationRepresentationAttribute",        insertText = "CompilationRepresentationAttribute",        kind = 7,        label = "CompilationRepresentationAttribute",        sortText = "000160"      }, {        filterText = "CompilationRepresentationFlags",        insertText = "CompilationRepresentationFlags",        kind = 13,        label = "CompilationRepresentationFlags",        sortText = "000161"      }, {        filterText = "CompilationSourceNameAttribute",        insertText = "CompilationSourceNameAttribute",        kind = 7,        label = "CompilationSourceNameAttribute",        sortText = "000162"      }, {        filterText = "CompiledNameAttribute",        insertText = "CompiledNameAttribute",        kind = 7,        label = "CompiledNameAttribute",        sortText = "000163"      }, {        filterText = "CompilerMessageAttribute",        insertText = "CompilerMessageAttribute",        kind = 7,        label = "CompilerMessageAttribute",        sortText = "000164"      }, {        filterText = "CompilerServices",        insertText = "CompilerServices",        kind = 9,        label = "CompilerServices",        sortText = "000165"      }, {        filterText = "Control",        insertText = "Control",        kind = 9,        label = "Control",        sortText = "000166"      }, {        filterText = "Core",        insertText = "Core",        kind = 9,        label = "Core",        sortText = "000167"      }, {        filterText = "CustomComparisonAttribute",        insertText = "CustomComparisonAttribute",        kind = 7,        label = "CustomComparisonAttribute",        sortText = "000168"      }, {        filterText = "CustomEqualityAttribute",        insertText = "CustomEqualityAttribute",        kind = 7,        label = "CustomEqualityAttribute",        sortText = "000169"      }, {        filterText = "CustomOperationAttribute",        insertText = "CustomOperationAttribute",        kind = 7,        label = "CustomOperationAttribute",        sortText = "000170"      }, {        filterText = "Data",        insertText = "Data",        kind = 9,        label = "Data",        sortText = "000171"      }, {        filterText = "DefaultAugmentationAttribute",        insertText = "DefaultAugmentationAttribute",        kind = 7,        label = "DefaultAugmentationAttribute",        sortText = "000172"      }, {        filterText = "DefaultValueAttribute",        insertText = "DefaultValueAttribute",        kind = 7,        label = "DefaultValueAttribute",        sortText = "000173"      }, {        filterText = "DelegateEvent",        insertText = "DelegateEvent",        kind = 7,        label = "DelegateEvent",        sortText = "000174"      }, {        filterText = "EntryPointAttribute",        insertText = "EntryPointAttribute",        kind = 7,        label = "EntryPointAttribute",        sortText = "000175"      }, {        filterText = "EqualityConditionalOnAttribute",        insertText = "EqualityConditionalOnAttribute",        kind = 7,        label = "EqualityConditionalOnAttribute",        sortText = "000176"      }, {        filterText = "Error",        insertText = "Error",        kind = 20,        label = "Error",        sortText = "000177"      }, {        filterText = "Event",        insertText = "Event",        kind = 9,        label = "Event",        sortText = "000178"      }, {        filterText = "exn",        insertText = "exn",        kind = 7,        label = "exn",        sortText = "000179"      }, {        filterText = "ExperimentalAttribute",        insertText = "ExperimentalAttribute",        kind = 7,        label = "ExperimentalAttribute",        sortText = "000180"      }, {        filterText = "ExtraTopLevelOperators",        insertText = "ExtraTopLevelOperators",        kind = 9,        label = "ExtraTopLevelOperators",        sortText = "000181"      }, {        filterText = "Format",        insertText = "Format",        kind = 7,        label = "Format",        sortText = "000182"      }, {        filterText = "FSharp",        insertText = "FSharp",        kind = 9,        label = "FSharp",        sortText = "000183"      }, {        filterText = "FSharpFunc",        insertText = "FSharpFunc",        kind = 3,        label = "FSharpFunc",        sortText = "000184"      }, {        filterText = "FSharpInterfaceDataVersionAttribute",        insertText = "FSharpInterfaceDataVersionAttribute",        kind = 7,        label = "FSharpInterfaceDataVersionAttribute",        sortText = "000185"      }, {        filterText = "FSharpTypeFunc",        insertText = "FSharpTypeFunc",        kind = 2,        label = "FSharpTypeFunc",        sortText = "000186"      }, {        filterText = "FuncConvert",        insertText = "FuncConvert",        kind = 7,        label = "FuncConvert",        sortText = "000187"      }, {        filterText = "GeneralizableValueAttribute",        insertText = "GeneralizableValueAttribute",        kind = 7,        label = "GeneralizableValueAttribute",        sortText = "000188"      }, {        filterText = "Handler",        insertText = "Handler",        kind = 3,        label = "Handler",        sortText = "000189"      }, {        filterText = "HashIdentity",        insertText = "HashIdentity",        kind = 9,        label = "HashIdentity",        sortText = "000190"      }, {        filterText = "IDelegateEvent",        insertText = "IDelegateEvent",        kind = 8,        label = "IDelegateEvent",        sortText = "000191"      }, {        filterText = "IEvent",        insertText = "IEvent",        kind = 8,        label = "IEvent",        sortText = "000192"      }, {        filterText = "ilsigptr",        insertText = "ilsigptr",        kind = 7,        label = "ilsigptr",        sortText = "000193"      }, {        filterText = "InlineIfLambdaAttribute",        insertText = "InlineIfLambdaAttribute",        kind = 7,        label = "InlineIfLambdaAttribute",        sortText = "000194"      }, {        filterText = "inref",        insertText = "inref",        kind = 7,        label = "inref",        sortText = "000195"      }, {        filterText = "InterfaceAttribute",        insertText = "InterfaceAttribute",        kind = 7,        label = "InterfaceAttribute",        sortText = "000196"      }, {        filterText = "KeyValue",        insertText = "KeyValue",        kind = 20,        label = "KeyValue",        sortText = "000197"      }, {        filterText = "LanguagePrimitives",        insertText = "LanguagePrimitives",        kind = 9,        label = "LanguagePrimitives",        sortText = "000198"      }, {        filterText = "Lazy",        insertText = "Lazy",        kind = 20,        label = "Lazy",        sortText = "000199"      }, {        filterText = "LazyExtensions",        insertText = "LazyExtensions",        kind = 9,        label = "LazyExtensions",        sortText = "000200"      }, {        filterText = "Linq",        insertText = "Linq",        kind = 9,        label = "Linq",        sortText = "000201"      }, {        filterText = "List",        insertText = "List",        kind = 9,        label = "List",        sortText = "000202"      }, {        filterText = "list",        insertText = "list",        kind = 7,        label = "list",        sortText = "000203"      }, {        filterText = "LiteralAttribute",        insertText = "LiteralAttribute",        kind = 7,        label = "LiteralAttribute",        sortText = "000204"      }, {        filterText = "MailboxProcessor",        insertText = "MailboxProcessor",        kind = 7,        label = "MailboxProcessor",        sortText = "000205"      }, {        filterText = "Map",        insertText = "Map",        kind = 9,        label = "Map",        sortText = "000206"      }, {        filterText = "MatchFailureException",        insertText = "MatchFailureException",        kind = 7,        label = "MatchFailureException",        sortText = "000207"      }, {        filterText = "MeasureAnnotatedAbbreviationAttribute",        insertText = "MeasureAnnotatedAbbreviationAttribute",        kind = 7,        label = "MeasureAnnotatedAbbreviationAttribute",        sortText = "000208"      }, {        filterText = "MeasureAttribute",        insertText = "MeasureAttribute",        kind = 7,        label = "MeasureAttribute",        sortText = "000209"      }, {        filterText = "Microsoft",        insertText = "Microsoft",        kind = 9,        label = "Microsoft",        sortText = "000210"      }, {        filterText = "NativeInterop",        insertText = "NativeInterop",        kind = 9,        label = "NativeInterop",        sortText = "000211"      }, {        filterText = "nativeptr",        insertText = "nativeptr",        kind = 7,        label = "nativeptr",        sortText = "000212"      }, {        filterText = "NoComparisonAttribute",        insertText = "NoComparisonAttribute",        kind = 7,        label = "NoComparisonAttribute",        sortText = "000213"      }, {        filterText = "NoDynamicInvocationAttribute",        insertText = "NoDynamicInvocationAttribute",        kind = 7,        label = "NoDynamicInvocationAttribute",        sortText = "000214"      }, {        filterText = "NoEqualityAttribute",        insertText = "NoEqualityAttribute",        kind = 7,        label = "NoEqualityAttribute",        sortText = "000215"      }, {        filterText = "None",        insertText = "None",        kind = 20,        label = "None",        sortText = "000216"      }, {        filterText = "NonStructuralComparison",        insertText = "NonStructuralComparison",        kind = 9,        label = "NonStructuralComparison",        sortText = "000217"      }, {        filterText = "NumericLiteralI",        insertText = "NumericLiteralI",        kind = 9,        label = "NumericLiteralI",        sortText = "000218"      }, {        filterText = "NumericLiterals",        insertText = "NumericLiterals",        kind = 9,        label = "NumericLiterals",        sortText = "000219"      }, {        filterText = "obj",        insertText = "obj",        kind = 7,        label = "obj",        sortText = "000220"      }, {        filterText = "Observable",        insertText = "Observable",        kind = 9,        label = "Observable",        sortText = "000221"      }, {        filterText = "Ok",        insertText = "Ok",        kind = 20,        label = "Ok",        sortText = "000222"      }, {        filterText = "OperatorIntrinsics",        insertText = "OperatorIntrinsics",        kind = 9,        label = "OperatorIntrinsics",        sortText = "000223"      }, {        filterText = "Operators",        insertText = "Operators",        kind = 9,        label = "Operators",        sortText = "000224"      }, {        filterText = "OptimizedClosures",        insertText = "OptimizedClosures",        kind = 9,        label = "OptimizedClosures",        sortText = "000225"      }, {        filterText = "Option",        insertText = "Option",        kind = 9,        label = "Option",        sortText = "000226"      }, {        filterText = "option",        insertText = "option",        kind = 7,        label = "option",        sortText = "000227"      }, {        filterText = "OptionalArgumentAttribute",        insertText = "OptionalArgumentAttribute",        kind = 7,        label = "OptionalArgumentAttribute",        sortText = "000228"      }, {        filterText = "outref",        insertText = "outref",        kind = 7,        label = "outref",        sortText = "000229"      }, {        filterText = "Printf",        insertText = "Printf",        kind = 9,        label = "Printf",        sortText = "000230"      }, {        filterText = "PrintfFormat",        insertText = "PrintfFormat",        kind = 7,        label = "PrintfFormat",        sortText = "000231"      }, {        filterText = "ProjectionParameterAttribute",        insertText = "ProjectionParameterAttribute",        kind = 7,        label = "ProjectionParameterAttribute",        sortText = "000232"      }, {        filterText = "Quotations",        insertText = "Quotations",        kind = 9,        label = "Quotations",        sortText = "000233"      }, {        filterText = "ReferenceEqualityAttribute",        insertText = "ReferenceEqualityAttribute",        kind = 7,        label = "ReferenceEqualityAttribute",        sortText = "000234"      }, {        filterText = "ReflectedDefinitionAttribute",        insertText = "ReflectedDefinitionAttribute",        kind = 7,        label = "ReflectedDefinitionAttribute",        sortText = "000235"      }, {        filterText = "Reflection",        insertText = "Reflection",        kind = 9,        label = "Reflection",        sortText = "000236"      }, {        filterText = "RequireQualifiedAccessAttribute",        insertText = "RequireQualifiedAccessAttribute",        kind = 7,        label = "RequireQualifiedAccessAttribute",        sortText = "000237"      }, {        filterText = "RequiresExplicitTypeArgumentsAttribute",        insertText = "RequiresExplicitTypeArgumentsAttribute",        kind = 7,        label = "RequiresExplicitTypeArgumentsAttribute",        sortText = "000238"      }, {        filterText = "ResizeArray",        insertText = "ResizeArray",        kind = 7,        label = "ResizeArray",        sortText = "000239"      }, {        filterText = "Result",        insertText = "Result",        kind = 9,        label = "Result",        sortText = "000240"      }, {        filterText = "SealedAttribute",        insertText = "SealedAttribute",        kind = 7,        label = "SealedAttribute",        sortText = "000241"      }, {        filterText = "Seq",        insertText = "Seq",        kind = 9,        label = "Seq",        sortText = "000242"      }, {        filterText = "Set",        insertText = "Set",        kind = 9,        label = "Set",        sortText = "000243"      }, {        filterText = "Some",        insertText = "Some",        kind = 20,        label = "Some",        sortText = "000244"      }, {        filterText = "SourceConstructFlags",        insertText = "SourceConstructFlags",        kind = 13,        label = "SourceConstructFlags",        sortText = "000245"      }, {        filterText = "String",        insertText = "String",        kind = 9,        label = "String",        sortText = "000246"      }, {        filterText = "StructAttribute",        insertText = "StructAttribute",        kind = 7,        label = "StructAttribute",        sortText = "000247"      }, {        filterText = "StructuralComparisonAttribute",        insertText = "StructuralComparisonAttribute",        kind = 7,        label = "StructuralComparisonAttribute",        sortText = "000248"      }, {        filterText = "StructuralEqualityAttribute",        insertText = "StructuralEqualityAttribute",        kind = 7,        label = "StructuralEqualityAttribute",        sortText = "000249"      }, {        filterText = "StructuredFormatDisplayAttribute",        insertText = "StructuredFormatDisplayAttribute",        kind = 7,        label = "StructuredFormatDisplayAttribute",        sortText = "000250"      }, {        filterText = "System",        insertText = "System",        kind = 9,        label = "System",        sortText = "000251"      }, {        filterText = "TaskBuilder",        insertText = "TaskBuilder",        kind = 9,        label = "TaskBuilder",        sortText = "000252"      }, {        filterText = "TaskBuilderBase",        insertText = "TaskBuilderBase",        kind = 7,        label = "TaskBuilderBase",        sortText = "000253"      }, {        filterText = "TaskBuilderExtensions",        insertText = "TaskBuilderExtensions",        kind = 9,        label = "TaskBuilderExtensions",        sortText = "000254"      }, {        filterText = "Unchecked",        insertText = "Unchecked",        kind = 9,        label = "Unchecked",        sortText = "000255"      }, {        filterText = "unit",        insertText = "unit",        kind = 7,        label = "unit",        sortText = "000256"      }, {        filterText = "UnverifiableAttribute",        insertText = "UnverifiableAttribute",        kind = 7,        label = "UnverifiableAttribute",        sortText = "000257"      }, {        filterText = "ValueNone",        insertText = "ValueNone",        kind = 20,        label = "ValueNone",        sortText = "000258"      }, {        filterText = "ValueOption",        insertText = "ValueOption",        kind = 9,        label = "ValueOption",        sortText = "000259"      }, {        filterText = "ValueSome",        insertText = "ValueSome",        kind = 20,        label = "ValueSome",        sortText = "000260"      }, {        filterText = "voidptr",        insertText = "voidptr",        kind = 7,        label = "voidptr",        sortText = "000261"      }, {        filterText = "VolatileFieldAttribute",        insertText = "VolatileFieldAttribute",        kind = 7,        label = "VolatileFieldAttribute",        sortText = "000262"      }, {        filterText = "voption",        insertText = "voption",        kind = 7,        label = "voption",        sortText = "000263"      }, {        filterText = "WebExtensions",        insertText = "WebExtensions",        kind = 9,        label = "WebExtensions",        sortText = "000264"      }, {        filterText = "[]",        insertText = "``[]``",        kind = 7,        label = "[]",        sortText = "000265"      } }  }}
[DEBUG][2022-03-12 20:24:26] .../vim/lsp/rpc.lua:347	"rpc.send"	{  jsonrpc = "2.0",  method = "textDocument/didChange",  params = {    contentChanges = { {        text = 'let rec quicksort l =\r\n    match l with\r\n    | [] -> [] // if the list is empty\r\n    | firstElem :: otherElements -> // if the list is not empty,\r\n        let smallerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e < firstElem)\r\n            |> quicksort\r\n\r\n        let largerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e >= firstElem)\r\n            |> quicksort\r\n\r\n        List.concat [ smallerElements\r\n                      [ firstElem ]\r\n                      largerElements ]\r\n\r\n\r\nlet ric quicksort2 =\r\n    function\r\n    | [] -> []\r\n    | first :: rest ->\r\n        let smaller, larger = List.partition ((>=) first) rest\r\n\r\n        List.concat [ quicksort2 smaller\r\n                      [ first ]\r\n                      quicksort2 larger ]\r\n\r\nprintfn "%A" (quicksort [ 1; 5; 23; 18; 9; 1; 3 ])\r\nlet \r\n'      } },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs",      version = 7    }  }}
[DEBUG][2022-03-12 20:24:26] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/signatureHelp"	{  position = {    character = 4,    line = 30  },  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:24:26] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 5,  jsonrpc = "2.0",  method = "textDocument/signatureHelp",  params = {    position = {      character = 4,      line = 30    },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:24:26] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 5,  jsonrpc = "2.0"}
[DEBUG][2022-03-12 20:24:26] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "fsharp/fileParsed",  params = {    content = "/home/henryw/Documents/Projects/F#/quicksort/Program.fs"  }}
[DEBUG][2022-03-12 20:24:26] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "textDocument/publishDiagnostics",  params = {    diagnostics = { {        code = "10",        codeDescription = {          href = "https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/compiler-messages/fs0010"        },        debuggerDisplay = "[Error] ((31,0)-(31,0)) Incomplete structured construct at or before this point in binding (10)",        message = "Incomplete structured construct at or before this point in binding",        range = {          debuggerDisplay = "(31,0)-(31,0)",          end = {            character = 0,            debuggerDisplay = "(31,0)",            line = 31          },          start = {            character = 0,            debuggerDisplay = "(31,0)",            line = 31          }        },        relatedInformation = {},        severity = 1,        source = "F# Compiler"      } },    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}
[DEBUG][2022-03-12 20:24:26] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/documentSymbol"	{  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:24:26] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 6,  jsonrpc = "2.0",  method = "textDocument/documentSymbol",  params = {    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:24:26] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 6,  jsonrpc = "2.0",  result = { {      kind = 2,      location = {        range = {          debuggerDisplay = "(0,0)-(31,0)",          end = {            character = 0,            debuggerDisplay = "(31,0)",            line = 31          },          start = {            character = 0,            debuggerDisplay = "(0,0)",            line = 0          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "Program"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(0,8)-(16,38)",          end = {            character = 38,            debuggerDisplay = "(16,38)",            line = 16          },          start = {            character = 8,            debuggerDisplay = "(0,8)",            line = 0          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "quicksort"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(19,4)-(27,41)",          end = {            character = 41,            debuggerDisplay = "(27,41)",            line = 27          },          start = {            character = 4,            debuggerDisplay = "(19,4)",            line = 19          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "ric"    } }}
[DEBUG][2022-03-12 20:24:31] .../vim/lsp/rpc.lua:347	"rpc.send"	{  jsonrpc = "2.0",  method = "textDocument/didChange",  params = {    contentChanges = { {        text = 'let rec quicksort l =\r\n    match l with\r\n    | [] -> [] // if the list is empty\r\n    | firstElem :: otherElements -> // if the list is not empty,\r\n        let smallerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e < firstElem)\r\n            |> quicksort\r\n\r\n        let largerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e >= firstElem)\r\n            |> quicksort\r\n\r\n        List.concat [ smallerElements\r\n                      [ firstElem ]\r\n                      largerElements ]\r\n\r\n\r\nlet ric quicksort2 =\r\n    function\r\n    | [] -> []\r\n    | first :: rest ->\r\n        let smaller, larger = List.partition ((>=) first) rest\r\n\r\n        List.concat [ quicksort2 smaller\r\n                      [ first ]\r\n                      quicksort2 larger ]\r\n\r\nprintfn "%A" (quicksort [ 1; 5; 23; 18; 9; 1; 3 ])\r\nlet a\r\n'      } },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs",      version = 8    }  }}
[DEBUG][2022-03-12 20:24:31] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/completion"	{  context = {    triggerKind = 1  },  position = {    character = 5,    line = 30  },  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:24:31] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 7,  jsonrpc = "2.0",  method = "textDocument/completion",  params = {    context = {      triggerKind = 1    },    position = {      character = 5,      line = 30    },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:24:31] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 7,  jsonrpc = "2.0",  result = {    isIncomplete = false,    items = {}  }}
[DEBUG][2022-03-12 20:24:31] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/signatureHelp"	{  position = {    character = 4,    line = 30  },  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:24:31] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 8,  jsonrpc = "2.0",  method = "textDocument/signatureHelp",  params = {    position = {      character = 4,      line = 30    },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:24:31] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 8,  jsonrpc = "2.0"}
[DEBUG][2022-03-12 20:24:32] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "fsharp/fileParsed",  params = {    content = "/home/henryw/Documents/Projects/F#/quicksort/Program.fs"  }}
[DEBUG][2022-03-12 20:24:32] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "textDocument/publishDiagnostics",  params = {    diagnostics = { {        code = "10",        codeDescription = {          href = "https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/compiler-messages/fs0010"        },        debuggerDisplay = "[Error] ((31,0)-(31,0)) Incomplete structured construct at or before this point in binding. Expected '=' or other token. (10)",        message = "Incomplete structured construct at or before this point in binding. Expected '=' or other token.",        range = {          debuggerDisplay = "(31,0)-(31,0)",          end = {            character = 0,            debuggerDisplay = "(31,0)",            line = 31          },          start = {            character = 0,            debuggerDisplay = "(31,0)",            line = 31          }        },        relatedInformation = {},        severity = 1,        source = "F# Compiler"      } },    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}
[DEBUG][2022-03-12 20:24:32] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/documentSymbol"	{  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:24:32] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 9,  jsonrpc = "2.0",  method = "textDocument/documentSymbol",  params = {    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:24:32] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 9,  jsonrpc = "2.0",  result = { {      kind = 2,      location = {        range = {          debuggerDisplay = "(0,0)-(31,0)",          end = {            character = 0,            debuggerDisplay = "(31,0)",            line = 31          },          start = {            character = 0,            debuggerDisplay = "(0,0)",            line = 0          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "Program"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(30,4)-(30,5)",          end = {            character = 5,            debuggerDisplay = "(30,5)",            line = 30          },          start = {            character = 4,            debuggerDisplay = "(30,4)",            line = 30          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "a"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(0,8)-(16,38)",          end = {            character = 38,            debuggerDisplay = "(16,38)",            line = 16          },          start = {            character = 8,            debuggerDisplay = "(0,8)",            line = 0          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "quicksort"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(19,4)-(27,41)",          end = {            character = 41,            debuggerDisplay = "(27,41)",            line = 27          },          start = {            character = 4,            debuggerDisplay = "(19,4)",            line = 19          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "ric"    } }}
[DEBUG][2022-03-12 20:24:32] .../vim/lsp/rpc.lua:347	"rpc.send"	{  jsonrpc = "2.0",  method = "textDocument/didChange",  params = {    contentChanges = { {        text = 'let rec quicksort l =\r\n    match l with\r\n    | [] -> [] // if the list is empty\r\n    | firstElem :: otherElements -> // if the list is not empty,\r\n        let smallerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e < firstElem)\r\n            |> quicksort\r\n\r\n        let largerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e >= firstElem)\r\n            |> quicksort\r\n\r\n        List.concat [ smallerElements\r\n                      [ firstElem ]\r\n                      largerElements ]\r\n\r\n\r\nlet ric quicksort2 =\r\n    function\r\n    | [] -> []\r\n    | first :: rest ->\r\n        let smaller, larger = List.partition ((>=) first) rest\r\n\r\n        List.concat [ quicksort2 smaller\r\n                      [ first ]\r\n                      quicksort2 larger ]\r\n\r\nprintfn "%A" (quicksort [ 1; 5; 23; 18; 9; 1; 3 ])\r\nlet a \r\n'      } },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs",      version = 9    }  }}
[DEBUG][2022-03-12 20:24:32] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/signatureHelp"	{  position = {    character = 6,    line = 30  },  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:24:32] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 10,  jsonrpc = "2.0",  method = "textDocument/signatureHelp",  params = {    position = {      character = 6,      line = 30    },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:24:32] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 10,  jsonrpc = "2.0"}
[DEBUG][2022-03-12 20:24:32] .../vim/lsp/rpc.lua:347	"rpc.send"	{  jsonrpc = "2.0",  method = "textDocument/didChange",  params = {    contentChanges = { {        text = 'let rec quicksort l =\r\n    match l with\r\n    | [] -> [] // if the list is empty\r\n    | firstElem :: otherElements -> // if the list is not empty,\r\n        let smallerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e < firstElem)\r\n            |> quicksort\r\n\r\n        let largerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e >= firstElem)\r\n            |> quicksort\r\n\r\n        List.concat [ smallerElements\r\n                      [ firstElem ]\r\n                      largerElements ]\r\n\r\n\r\nlet ric quicksort2 =\r\n    function\r\n    | [] -> []\r\n    | first :: rest ->\r\n        let smaller, larger = List.partition ((>=) first) rest\r\n\r\n        List.concat [ quicksort2 smaller\r\n                      [ first ]\r\n                      quicksort2 larger ]\r\n\r\nprintfn "%A" (quicksort [ 1; 5; 23; 18; 9; 1; 3 ])\r\nlet a =\r\n'      } },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs",      version = 10    }  }}
[DEBUG][2022-03-12 20:24:32] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/signatureHelp"	{  position = {    character = 6,    line = 30  },  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:24:32] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 11,  jsonrpc = "2.0",  method = "textDocument/signatureHelp",  params = {    position = {      character = 6,      line = 30    },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:24:32] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 11,  jsonrpc = "2.0"}
[DEBUG][2022-03-12 20:24:33] .../vim/lsp/rpc.lua:347	"rpc.send"	{  jsonrpc = "2.0",  method = "textDocument/didChange",  params = {    contentChanges = { {        text = 'let rec quicksort l =\r\n    match l with\r\n    | [] -> [] // if the list is empty\r\n    | firstElem :: otherElements -> // if the list is not empty,\r\n        let smallerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e < firstElem)\r\n            |> quicksort\r\n\r\n        let largerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e >= firstElem)\r\n            |> quicksort\r\n\r\n        List.concat [ smallerElements\r\n                      [ firstElem ]\r\n                      largerElements ]\r\n\r\n\r\nlet ric quicksort2 =\r\n    function\r\n    | [] -> []\r\n    | first :: rest ->\r\n        let smaller, larger = List.partition ((>=) first) rest\r\n\r\n        List.concat [ quicksort2 smaller\r\n                      [ first ]\r\n                      quicksort2 larger ]\r\n\r\nprintfn "%A" (quicksort [ 1; 5; 23; 18; 9; 1; 3 ])\r\nlet a = \r\n'      } },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs",      version = 11    }  }}
[DEBUG][2022-03-12 20:24:33] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/signatureHelp"	{  position = {    character = 8,    line = 30  },  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:24:33] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 12,  jsonrpc = "2.0",  method = "textDocument/signatureHelp",  params = {    position = {      character = 8,      line = 30    },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:24:33] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 12,  jsonrpc = "2.0"}
[DEBUG][2022-03-12 20:24:33] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "fsharp/fileParsed",  params = {    content = "/home/henryw/Documents/Projects/F#/quicksort/Program.fs"  }}
[DEBUG][2022-03-12 20:24:33] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "textDocument/publishDiagnostics",  params = {    diagnostics = { {        code = "58",        codeDescription = {          href = "https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/compiler-messages/fs0058"        },        debuggerDisplay = "[Warning] ((31,0)-(31,0)) Possible incorrect indentation: this token is offside of context started at position (31:1). Try indenting this token further or using standard formatting conventions. (58)",        message = "Possible incorrect indentation: this token is offside of context started at position (31:1). Try indenting this token further or using standard formatting conventions.",        range = {          debuggerDisplay = "(31,0)-(31,0)",          end = {            character = 0,            debuggerDisplay = "(31,0)",            line = 31          },          start = {            character = 0,            debuggerDisplay = "(31,0)",            line = 31          }        },        relatedInformation = {},        severity = 2,        source = "F# Compiler"      }, {        code = "10",        codeDescription = {          href = "https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/compiler-messages/fs0010"        },        debuggerDisplay = "[Error] ((31,0)-(31,0)) Incomplete structured construct at or before this point in binding (10)",        message = "Incomplete structured construct at or before this point in binding",        range = {          debuggerDisplay = "(31,0)-(31,0)",          end = {            character = 0,            debuggerDisplay = "(31,0)",            line = 31          },          start = {            character = 0,            debuggerDisplay = "(31,0)",            line = 31          }        },        relatedInformation = {},        severity = 1,        source = "F# Compiler"      } },    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}
[DEBUG][2022-03-12 20:24:33] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/documentSymbol"	{  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:24:33] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 13,  jsonrpc = "2.0",  method = "textDocument/documentSymbol",  params = {    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:24:33] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 13,  jsonrpc = "2.0",  result = { {      kind = 2,      location = {        range = {          debuggerDisplay = "(0,0)-(31,0)",          end = {            character = 0,            debuggerDisplay = "(31,0)",            line = 31          },          start = {            character = 0,            debuggerDisplay = "(0,0)",            line = 0          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "Program"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(30,4)-(30,7)",          end = {            character = 7,            debuggerDisplay = "(30,7)",            line = 30          },          start = {            character = 4,            debuggerDisplay = "(30,4)",            line = 30          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "a"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(0,8)-(16,38)",          end = {            character = 38,            debuggerDisplay = "(16,38)",            line = 16          },          start = {            character = 8,            debuggerDisplay = "(0,8)",            line = 0          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "quicksort"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(19,4)-(27,41)",          end = {            character = 41,            debuggerDisplay = "(27,41)",            line = 27          },          start = {            character = 4,            debuggerDisplay = "(19,4)",            line = 19          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "ric"    } }}
[DEBUG][2022-03-12 20:24:38] .../vim/lsp/rpc.lua:347	"rpc.send"	{  jsonrpc = "2.0",  method = "textDocument/didChange",  params = {    contentChanges = { {        text = 'let rec quicksort l =\r\n    match l with\r\n    | [] -> [] // if the list is empty\r\n    | firstElem :: otherElements -> // if the list is not empty,\r\n        let smallerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e < firstElem)\r\n            |> quicksort\r\n\r\n        let largerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e >= firstElem)\r\n            |> quicksort\r\n\r\n        List.concat [ smallerElements\r\n                      [ firstElem ]\r\n                      largerElements ]\r\n\r\n\r\nlet ric quicksort2 =\r\n    function\r\n    | [] -> []\r\n    | first :: rest ->\r\n        let smaller, larger = List.partition ((>=) first) rest\r\n\r\n        List.concat [ quicksort2 smaller\r\n                      [ first ]\r\n                      quicksort2 larger ]\r\n\r\nprintfn "%A" (quicksort [ 1; 5; 23; 18; 9; 1; 3 ])\r\nlet a = p\r\n'      } },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs",      version = 12    }  }}
[DEBUG][2022-03-12 20:24:38] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/completion"	{  context = {    triggerKind = 1  },  position = {    character = 9,    line = 30  },  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:24:38] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 14,  jsonrpc = "2.0",  method = "textDocument/completion",  params = {    context = {      triggerKind = 1    },    position = {      character = 9,      line = 30    },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:24:38] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 14,  jsonrpc = "2.0",  result = {    isIncomplete = false,    items = {}  }}
[DEBUG][2022-03-12 20:24:38] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/signatureHelp"	{  position = {    character = 8,    line = 30  },  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:24:38] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 15,  jsonrpc = "2.0",  method = "textDocument/signatureHelp",  params = {    position = {      character = 8,      line = 30    },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:24:38] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 15,  jsonrpc = "2.0"}
[DEBUG][2022-03-12 20:24:39] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "fsharp/fileParsed",  params = {    content = "/home/henryw/Documents/Projects/F#/quicksort/Program.fs"  }}
[DEBUG][2022-03-12 20:24:39] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "textDocument/publishDiagnostics",  params = {    diagnostics = { {        code = "39",        codeDescription = {          href = "https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/compiler-messages/fs0039"        },        debuggerDisplay = "[Error] ((30,8)-(30,9)) The value or constructor 'p' is not defined. (39)",        message = "The value or constructor 'p' is not defined.",        range = {          debuggerDisplay = "(30,8)-(30,9)",          end = {            character = 9,            debuggerDisplay = "(30,9)",            line = 30          },          start = {            character = 8,            debuggerDisplay = "(30,8)",            line = 30          }        },        relatedInformation = {},        severity = 1,        source = "F# Compiler"      } },    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}
[DEBUG][2022-03-12 20:24:39] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/documentSymbol"	{  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:24:39] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 16,  jsonrpc = "2.0",  method = "textDocument/documentSymbol",  params = {    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:24:39] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 16,  jsonrpc = "2.0",  result = { {      kind = 2,      location = {        range = {          debuggerDisplay = "(0,0)-(31,0)",          end = {            character = 0,            debuggerDisplay = "(31,0)",            line = 31          },          start = {            character = 0,            debuggerDisplay = "(0,0)",            line = 0          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "Program"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(30,4)-(30,9)",          end = {            character = 9,            debuggerDisplay = "(30,9)",            line = 30          },          start = {            character = 4,            debuggerDisplay = "(30,4)",            line = 30          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "a"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(0,8)-(16,38)",          end = {            character = 38,            debuggerDisplay = "(16,38)",            line = 16          },          start = {            character = 8,            debuggerDisplay = "(0,8)",            line = 0          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "quicksort"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(19,4)-(27,41)",          end = {            character = 41,            debuggerDisplay = "(27,41)",            line = 27          },          start = {            character = 4,            debuggerDisplay = "(19,4)",            line = 19          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "ric"    } }}
[DEBUG][2022-03-12 20:24:40] .../vim/lsp/rpc.lua:347	"rpc.send"	{  jsonrpc = "2.0",  method = "textDocument/didChange",  params = {    contentChanges = { {        text = 'let rec quicksort l =\r\n    match l with\r\n    | [] -> [] // if the list is empty\r\n    | firstElem :: otherElements -> // if the list is not empty,\r\n        let smallerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e < firstElem)\r\n            |> quicksort\r\n\r\n        let largerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e >= firstElem)\r\n            |> quicksort\r\n\r\n        List.concat [ smallerElements\r\n                      [ firstElem ]\r\n                      largerElements ]\r\n\r\n\r\nlet ric quicksort2 =\r\n    function\r\n    | [] -> []\r\n    | first :: rest ->\r\n        let smaller, larger = List.partition ((>=) first) rest\r\n\r\n        List.concat [ quicksort2 smaller\r\n                      [ first ]\r\n                      quicksort2 larger ]\r\n\r\nprintfn "%A" (quicksort [ 1; 5; 23; 18; 9; 1; 3 ])\r\nlet a = pr\r\n'      } },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs",      version = 13    }  }}
[DEBUG][2022-03-12 20:24:40] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/signatureHelp"	{  position = {    character = 8,    line = 30  },  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:24:40] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 17,  jsonrpc = "2.0",  method = "textDocument/signatureHelp",  params = {    position = {      character = 8,      line = 30    },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:24:40] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 17,  jsonrpc = "2.0"}
[DEBUG][2022-03-12 20:24:41] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "fsharp/fileParsed",  params = {    content = "/home/henryw/Documents/Projects/F#/quicksort/Program.fs"  }}
[DEBUG][2022-03-12 20:24:41] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "textDocument/publishDiagnostics",  params = {    diagnostics = { {        code = "39",        codeDescription = {          href = "https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/compiler-messages/fs0039"        },        debuggerDisplay = "[Error] ((30,8)-(30,10)) The value or constructor 'pr' is not defined. (39)",        message = "The value or constructor 'pr' is not defined.",        range = {          debuggerDisplay = "(30,8)-(30,10)",          end = {            character = 10,            debuggerDisplay = "(30,10)",            line = 30          },          start = {            character = 8,            debuggerDisplay = "(30,8)",            line = 30          }        },        relatedInformation = {},        severity = 1,        source = "F# Compiler"      } },    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}
[DEBUG][2022-03-12 20:24:41] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/documentSymbol"	{  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:24:41] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 18,  jsonrpc = "2.0",  method = "textDocument/documentSymbol",  params = {    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:24:41] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 18,  jsonrpc = "2.0",  result = { {      kind = 2,      location = {        range = {          debuggerDisplay = "(0,0)-(31,0)",          end = {            character = 0,            debuggerDisplay = "(31,0)",            line = 31          },          start = {            character = 0,            debuggerDisplay = "(0,0)",            line = 0          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "Program"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(30,4)-(30,10)",          end = {            character = 10,            debuggerDisplay = "(30,10)",            line = 30          },          start = {            character = 4,            debuggerDisplay = "(30,4)",            line = 30          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "a"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(0,8)-(16,38)",          end = {            character = 38,            debuggerDisplay = "(16,38)",            line = 16          },          start = {            character = 8,            debuggerDisplay = "(0,8)",            line = 0          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "quicksort"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(19,4)-(27,41)",          end = {            character = 41,            debuggerDisplay = "(27,41)",            line = 27          },          start = {            character = 4,            debuggerDisplay = "(19,4)",            line = 19          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "ric"    } }}

@quantum-booty
Copy link
Author

@baronfel here I tried to type

let x =
    l
[DEBUG][2022-03-12 20:37:14] .../vim/lsp/rpc.lua:347	"rpc.send"	{  jsonrpc = "2.0",  method = "textDocument/didChange",  params = {    contentChanges = { {        text = 'let rec quicksort l =\r\n    match l with\r\n    | [] -> [] // if the list is empty\r\n    | firstElem :: otherElements -> // if the list is not empty,\r\n        let smallerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e < firstElem)\r\n            |> quicksort\r\n\r\n        let largerElements =\r\n            otherElements\r\n            |> List.filter (fun e -> e >= firstElem)\r\n            |> quicksort\r\n\r\n        List.concat [ smallerElements\r\n                      [ firstElem ]\r\n                      largerElements ]\r\n\r\n\r\nlet ric quicksort2 =\r\n    function\r\n    | [] -> []\r\n    | first :: rest ->\r\n        let smaller, larger = List.partition ((>=) first) rest\r\n\r\n        List.concat [ quicksort2 smaller\r\n                      [ first ]\r\n                      quicksort2 larger ]\r\n\r\nprintfn "%A" (quicksort [ 1; 5; 23; 18; 9; 1; 3 ])\r\nlet x =\r\n\r\n    l\r\n'      } },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs",      version = 6    }  }}
[DEBUG][2022-03-12 20:37:14] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/completion"	{  context = {    triggerKind = 1  },  position = {    character = 5,    line = 32  },  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:37:14] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 5,  jsonrpc = "2.0",  method = "textDocument/completion",  params = {    context = {      triggerKind = 1    },    position = {      character = 5,      line = 32    },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:37:14] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/signatureHelp"	{  position = {    character = 4,    line = 32  },  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:37:14] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 6,  jsonrpc = "2.0",  method = "textDocument/signatureHelp",  params = {    position = {      character = 4,      line = 32    },    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:37:14] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  error = {    code = -32603,    message = "Index was outside the bounds of the array."  },  id = 6,  jsonrpc = "2.0"}
[ERROR][2022-03-12 20:37:14] .../vim/lsp/rpc.lua:420	"rpc"	"fsautocomplete"	"stderr"	"[20:37:14.858 ERR] [LSP] PositionHandler - Failed during child operation on file /home/henryw/Documents/Projects/F#/quicksort/Program.fs\nSystem.IndexOutOfRangeException: Index was outside the bounds of the array.\n   at FsAutoComplete.SignatureHelp.loop@203-17(ISourceText lines, Char ch, Position pos) in /home/runner/work/FsAutoComplete/FsAutoComplete/src/FsAutoComplete.Core/SignatureHelp.fs:line 204\n   at [email protected](Unit unitVar) in /home/runner/work/FsAutoComplete/FsAutoComplete/src/FsAutoComplete.Core/SignatureHelp.fs:line 210\n   at Microsoft.FSharp.Control.AsyncPrimitives.CallThenInvoke[T,TResult](AsyncActivation`1 ctxt, TResult result1, FSharpFunc`2 part2) in D:\\a\\_work\\1\\s\\src\\fsharp\\FSharp.Core\\async.fs:line 446\n   at Microsoft.FSharp.Control.Trampoline.Execute(FSharpFunc`2 firstAction) in D:\\a\\_work\\1\\s\\src\\fsharp\\FSharp.Core\\async.fs:line 104\n"
[DEBUG][2022-03-12 20:37:14] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 5,  jsonrpc = "2.0",  result = {    isIncomplete = false,    items = {}  }}
[DEBUG][2022-03-12 20:37:15] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "fsharp/fileParsed",  params = {    content = "/home/henryw/Documents/Projects/F#/quicksort/Program.fs"  }}
[DEBUG][2022-03-12 20:37:15] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  jsonrpc = "2.0",  method = "textDocument/publishDiagnostics",  params = {    diagnostics = { {        code = "39",        codeDescription = {          href = "https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/compiler-messages/fs0039"        },        debuggerDisplay = "[Error] ((32,4)-(32,5)) The value or constructor 'l' is not defined. (39)",        message = "The value or constructor 'l' is not defined.",        range = {          debuggerDisplay = "(32,4)-(32,5)",          end = {            character = 5,            debuggerDisplay = "(32,5)",            line = 32          },          start = {            character = 4,            debuggerDisplay = "(32,4)",            line = 32          }        },        relatedInformation = {},        severity = 1,        source = "F# Compiler"      } },    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}
[DEBUG][2022-03-12 20:37:15] .../lua/vim/lsp.lua:1023	"LSP[ionide]"	"client.request"	1	"textDocument/documentSymbol"	{  textDocument = {    uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"  }}	<function 1>	1
[DEBUG][2022-03-12 20:37:15] .../vim/lsp/rpc.lua:347	"rpc.send"	{  id = 7,  jsonrpc = "2.0",  method = "textDocument/documentSymbol",  params = {    textDocument = {      uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"    }  }}
[DEBUG][2022-03-12 20:37:15] .../vim/lsp/rpc.lua:454	"rpc.receive"	{  id = 7,  jsonrpc = "2.0",  result = { {      kind = 2,      location = {        range = {          debuggerDisplay = "(0,0)-(33,0)",          end = {            character = 0,            debuggerDisplay = "(33,0)",            line = 33          },          start = {            character = 0,            debuggerDisplay = "(0,0)",            line = 0          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "Program"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(0,8)-(16,38)",          end = {            character = 38,            debuggerDisplay = "(16,38)",            line = 16          },          start = {            character = 8,            debuggerDisplay = "(0,8)",            line = 0          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "quicksort"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(19,4)-(27,41)",          end = {            character = 41,            debuggerDisplay = "(27,41)",            line = 27          },          start = {            character = 4,            debuggerDisplay = "(19,4)",            line = 19          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "ric"    }, {      containerName = "Program",      kind = 8,      location = {        range = {          debuggerDisplay = "(30,4)-(32,5)",          end = {            character = 5,            debuggerDisplay = "(32,5)",            line = 32          },          start = {            character = 4,            debuggerDisplay = "(30,4)",            line = 30          }        },        uri = "file:///home/henryw/Documents/Projects/F%23/quicksort/Program.fs"      },      name = "x"    } }}

@baronfel
Copy link
Contributor

The error in your second message is for SignatureHelp, not completions, so I'll set that to the side for now. More interestingly - the completion request returns without error in this case, just with an empty array of suggestions. I repro this response in Ionide for VSCode, however it seems that VSCode implements some sort-of last-chance completion list with items that start with l, but aren't provided by the LSP.

So I think you're consistent here, and if anything we could look into enhancements in the completion functionality.

@quantum-booty
Copy link
Author

quantum-booty commented Mar 12, 2022

The error in your second message is for SignatureHelp, not completions, so I'll set that to the side for now. More interestingly - the completion request returns without error in this case, just with an empty array of suggestions. I repro this response in Ionide for VSCode, however it seems that VSCode implements some sort-of last-chance completion list with items that start with l, but aren't provided by the LSP.

So I think you're consistent here, and if anything we could look into enhancements in the completion functionality.

Yeah enhancement to completion would definitely be super helpful for text editors that aren't VSCode.

@baronfel
Copy link
Contributor

I'd love it if you opened a discussion or issue about what kind of experience you'd like to have in different completion scenarios! Even if some are hard to do, at least we'd have a list to work towards.

@quantum-booty
Copy link
Author

I'd love it if you opened a discussion or issue about what kind of experience you'd like to have in different completion scenarios! Even if some are hard to do, at least we'd have a list to work towards.

I'm still at the early stage of learning the language, so not sure what would be the best, but I'll try to open an issue.

@Krzysztof-Cieslak
Copy link
Member

I repro this response in Ionide for VSCode, however it seems that VSCode implements some sort-of last-chance completion list with items that start with l, but aren't provided by the LSP.

@baronfel, turn off editor.wordBasedSuggestions in the VSCode settings to not mess with your experiments.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants