-
Notifications
You must be signed in to change notification settings - Fork 196
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
tab completion is still sorting the wrong keywords to the bottom #883
Comments
@bcardarella Can you turn on tracing |
Also post your editor settings.json. There are some settings controlling suggestions order. In my case I only have
but changing those does not make any difference on |
ping @bcardarella |
@lukaszsamson apologies, catching up. Will post in a few |
Where do I find the protocol message to post? |
Enable tracing in extension settings |
I have it set to |
[Trace - 9:28:52 AM] Received response 'textDocument/completion - (371)' in 63ms.
Result: {
"isIncomplete": true,
"items": [
{
"deprecated": false,
"detail": "keyword",
"documentation": {
"kind": "markdown",
"value": ""
},
"insertText": "do\n $0\nend",
"insertTextFormat": 2,
"kind": 14,
"label": "do",
"preselect": true,
"sortText": "00000000",
"tags": []
},
{
"deprecated": false,
"detail": "typespec any()",
"documentation": {
"kind": "markdown",
"value": "The top type, the set of all terms"
},
"insertText": "any()",
"insertTextFormat": 2,
"kind": 7,
"label": "any",
"labelDetails": {
"description": "any/0",
"detail": "()"
},
"sortText": "00000001",
"tags": []
},
{
"deprecated": false,
"detail": "typespec arity()",
"documentation": {
"kind": "markdown",
"value": "The number of arguments that a function takes\n\n```\n@type arity() :: 0..255\n```\n"
},
"insertText": "arity()",
"insertTextFormat": 2,
"kind": 7,
"label": "arity",
"labelDetails": {
"description": "arity/0",
"detail": "()"
},
"sortText": "00000002",
"tags": []
},
{
"deprecated": false,
"detail": "typespec as_boolean(t)",
"documentation": {
"kind": "markdown",
"value": "A type `t` whose value will be used as a _truthy_ value\n\n```\n@type as_boolean(t) :: t\n```\n"
},
"insertText": "as_boolean($0)",
"insertTextFormat": 2,
"kind": 7,
"label": "as_boolean",
"labelDetails": {
"description": "as_boolean/1",
"detail": "(t)"
},
"sortText": "00000003",
"tags": []
},
{
"deprecated": false,
"detail": "typespec atom()",
"documentation": {
"kind": "markdown",
"value": "An atom is a constant whose name is its own value. Some other languages call these symbols"
},
"insertText": "atom()",
"insertTextFormat": 2,
"kind": 7,
"label": "atom",
"labelDetails": {
"description": "atom/0",
"detail": "()"
},
"sortText": "00000004",
"tags": []
},
{
"deprecated": false,
"detail": "typespec binary()",
"documentation": {
"kind": "markdown",
"value": "A blob of binary data\n\n```\n@type binary() ::\n <<_::size(8)>>\n```\n"
},
"insertText": "binary()",
"insertTextFormat": 2,
"kind": 7,
"label": "binary",
"labelDetails": {
"description": "binary/0",
"detail": "()"
},
"sortText": "00000005",
"tags": []
},
{
"deprecated": false,
"detail": "typespec bitstring()",
"documentation": {
"kind": "markdown",
"value": "A bunch of bits\n\n```\n@type bitstring() ::\n <<_::size(1)>>\n```\n"
},
"insertText": "bitstring()",
"insertTextFormat": 2,
"kind": 7,
"label": "bitstring",
"labelDetails": {
"description": "bitstring/0",
"detail": "()"
},
"sortText": "00000006",
"tags": []
},
{
"deprecated": false,
"detail": "typespec boolean()",
"documentation": {
"kind": "markdown",
"value": "`true` or `false`\n\n```\n@type boolean() ::\n false | true\n```\n"
},
"insertText": "boolean()",
"insertTextFormat": 2,
"kind": 7,
"label": "boolean",
"labelDetails": {
"description": "boolean/0",
"detail": "()"
},
"sortText": "00000007",
"tags": []
},
{
"deprecated": false,
"detail": "typespec byte()",
"documentation": {
"kind": "markdown",
"value": "A valid byte (0..255)\n\n```\n@type byte() :: 0..255\n```\n"
},
"insertText": "byte()",
"insertTextFormat": 2,
"kind": 7,
"label": "byte",
"labelDetails": {
"description": "byte/0",
"detail": "()"
},
"sortText": "00000008",
"tags": []
},
{
"deprecated": false,
"detail": "typespec char()",
"documentation": {
"kind": "markdown",
"value": "A valid char (0..0x10ffff)\n\n```\n@type char() ::\n 0..1_114_111\n```\n"
},
"insertText": "char()",
"insertTextFormat": 2,
"kind": 7,
"label": "char",
"labelDetails": {
"description": "char/0",
"detail": "()"
},
"sortText": "00000009",
"tags": []
},
{
"deprecated": false,
"detail": "typespec charlist()",
"documentation": {
"kind": "markdown",
"value": "A list of `char()`\n\n```\n@type charlist() :: [char()]\n```\n"
},
"insertText": "charlist()",
"insertTextFormat": 2,
"kind": 7,
"label": "charlist",
"labelDetails": {
"description": "charlist/0",
"detail": "()"
},
"sortText": "00000010",
"tags": []
},
{
"deprecated": false,
"detail": "typespec float()",
"documentation": {
"kind": "markdown",
"value": "A floating-point number"
},
"insertText": "float()",
"insertTextFormat": 2,
"kind": 7,
"label": "float",
"labelDetails": {
"description": "float/0",
"detail": "()"
},
"sortText": "00000011",
"tags": []
},
{
"deprecated": false,
"detail": "typespec fun()",
"documentation": {
"kind": "markdown",
"value": "A function\n\n```\n@type fun() ::\n (... -> any)\n```\n"
},
"insertText": "fun()",
"insertTextFormat": 2,
"kind": 7,
"label": "fun",
"labelDetails": {
"description": "fun/0",
"detail": "()"
},
"sortText": "00000012",
"tags": []
},
{
"deprecated": false,
"detail": "typespec function()",
"documentation": {
"kind": "markdown",
"value": "Same as `fun()`\n\n```\n@type function() :: fun()\n```\n"
},
"insertText": "function()",
"insertTextFormat": 2,
"kind": 7,
"label": "function",
"labelDetails": {
"description": "function/0",
"detail": "()"
},
"sortText": "00000013",
"tags": []
},
{
"deprecated": false,
"detail": "typespec identifier()",
"documentation": {
"kind": "markdown",
"value": "A `pid()`, `port()` or `reference()`\n\n```\n@type identifier() ::\n pid()\n | port()\n | reference()\n```\n"
},
"insertText": "identifier()",
"insertTextFormat": 2,
"kind": 7,
"label": "identifier",
"labelDetails": {
"description": "identifier/0",
"detail": "()"
},
"sortText": "00000014",
"tags": []
},
{
"deprecated": false,
"detail": "typespec integer()",
"documentation": {
"kind": "markdown",
"value": "An integer number"
},
"insertText": "integer()",
"insertTextFormat": 2,
"kind": 7,
"label": "integer",
"labelDetails": {
"description": "integer/0",
"detail": "()"
},
"sortText": "00000015",
"tags": []
},
{
"deprecated": false,
"detail": "typespec iodata()",
"documentation": {
"kind": "markdown",
"value": "An `iolist()` or a `binary()`\n\n```\n@type iodata() ::\n iolist() | binary()\n```\n"
},
"insertText": "iodata()",
"insertTextFormat": 2,
"kind": 7,
"label": "iodata",
"labelDetails": {
"description": "iodata/0",
"detail": "()"
},
"sortText": "00000016",
"tags": []
},
{
"deprecated": false,
"detail": "typespec iolist()",
"documentation": {
"kind": "markdown",
"value": "A list whose elements are either bytes, binaries or other iolists\n\n```\n@type iolist() ::\n maybe_improper_list(\n byte()\n | binary()\n | iolist(),\n binary() | []\n )\n```\n"
},
"insertText": "iolist()",
"insertTextFormat": 2,
"kind": 7,
"label": "iolist",
"labelDetails": {
"description": "iolist/0",
"detail": "()"
},
"sortText": "00000017",
"tags": []
},
{
"deprecated": false,
"detail": "typespec keyword(t)",
"documentation": {
"kind": "markdown",
"value": "A keyword list with values of type `t`\n\n```\n@type keyword(t) :: [\n {atom(), t}\n]\n```\n"
},
"insertText": "keyword($0)",
"insertTextFormat": 2,
"kind": 7,
"label": "keyword",
"labelDetails": {
"description": "keyword/1",
"detail": "(t)"
},
"sortText": "00000018",
"tags": []
},
{
"deprecated": false,
"detail": "typespec keyword()",
"documentation": {
"kind": "markdown",
"value": "A keyword list\n\n```\n@type keyword() :: [\n {atom(), any()}\n]\n```\n"
},
"insertText": "keyword()",
"insertTextFormat": 2,
"kind": 7,
"label": "keyword",
"labelDetails": {
"description": "keyword/0",
"detail": "()"
},
"sortText": "00000019",
"tags": []
},
{
"deprecated": false,
"detail": "typespec list(t)",
"documentation": {
"kind": "markdown",
"value": "Proper list ([]-terminated)"
},
"insertText": "list($0)",
"insertTextFormat": 2,
"kind": 7,
"label": "list",
"labelDetails": {
"description": "list/1",
"detail": "(t)"
},
"sortText": "00000020",
"tags": []
},
{
"deprecated": false,
"detail": "typespec list()",
"documentation": {
"kind": "markdown",
"value": "A list\n\n```\n@type list() :: [any()]\n```\n"
},
"insertText": "list()",
"insertTextFormat": 2,
"kind": 7,
"label": "list",
"labelDetails": {
"description": "list/0",
"detail": "()"
},
"sortText": "00000021",
"tags": []
},
{
"deprecated": false,
"detail": "typespec map()",
"documentation": {
"kind": "markdown",
"value": "Any map"
},
"insertText": "map()",
"insertTextFormat": 2,
"kind": 7,
"label": "map",
"labelDetails": {
"description": "map/0",
"detail": "()"
},
"sortText": "00000022",
"tags": []
},
{
"deprecated": false,
"detail": "typespec maybe_improper_list(type1, type2)",
"documentation": {
"kind": "markdown",
"value": "Proper or improper list (type1=contents, type2=termination)"
},
"insertText": "maybe_improper_list($0)",
"insertTextFormat": 2,
"kind": 7,
"label": "maybe_improper_list",
"labelDetails": {
"description": "maybe_improper_list/2",
"detail": "(type1, type2)"
},
"sortText": "00000023",
"tags": []
},
{
"deprecated": false,
"detail": "typespec maybe_improper_list()",
"documentation": {
"kind": "markdown",
"value": "An alias for `maybe_improper_list(any(), any())`\n\n```\n@type maybe_improper_list() ::\n maybe_improper_list(\n any(),\n any()\n )\n```\n"
},
"insertText": "maybe_improper_list()",
"insertTextFormat": 2,
"kind": 7,
"label": "maybe_improper_list",
"labelDetails": {
"description": "maybe_improper_list/0",
"detail": "()"
},
"sortText": "00000024",
"tags": []
},
{
"deprecated": false,
"detail": "typespec mfa()",
"documentation": {
"kind": "markdown",
"value": "A tuple with {module, function, arity}\n\n```\n@type mfa() ::\n {module(), atom(), arity()}\n```\n"
},
"insertText": "mfa()",
"insertTextFormat": 2,
"kind": 7,
"label": "mfa",
"labelDetails": {
"description": "mfa/0",
"detail": "()"
},
"sortText": "00000025",
"tags": []
},
{
"deprecated": false,
"detail": "typespec module()",
"documentation": {
"kind": "markdown",
"value": "A module name. An alias for `atom()`\n\n```\n@type module() :: atom()\n```\n"
},
"insertText": "module()",
"insertTextFormat": 2,
"kind": 7,
"label": "module",
"labelDetails": {
"description": "module/0",
"detail": "()"
},
"sortText": "00000026",
"tags": []
},
{
"deprecated": false,
"detail": "typespec neg_integer()",
"documentation": {
"kind": "markdown",
"value": "A negative integer"
},
"insertText": "neg_integer()",
"insertTextFormat": 2,
"kind": 7,
"label": "neg_integer",
"labelDetails": {
"description": "neg_integer/0",
"detail": "()"
},
"sortText": "00000027",
"tags": []
},
{
"deprecated": false,
"detail": "typespec no_return()",
"documentation": {
"kind": "markdown",
"value": "A return type indicating that a function throws exceptions or loops forever and never terminates\n\n```\n@type no_return() :: none()\n```\n"
},
"insertText": "no_return()",
"insertTextFormat": 2,
"kind": 7,
"label": "no_return",
"labelDetails": {
"description": "no_return/0",
"detail": "()"
},
"sortText": "00000028",
"tags": []
},
{
"deprecated": false,
"detail": "typespec node()",
"documentation": {
"kind": "markdown",
"value": "An atom representing a node name\n\n```\n@type node() :: atom()\n```\n"
},
"insertText": "node()",
"insertTextFormat": 2,
"kind": 7,
"label": "node",
"labelDetails": {
"description": "node/0",
"detail": "()"
},
"sortText": "00000029",
"tags": []
},
{
"deprecated": false,
"detail": "typespec non_neg_integer()",
"documentation": {
"kind": "markdown",
"value": "A non-negative integer"
},
"insertText": "non_neg_integer()",
"insertTextFormat": 2,
"kind": 7,
"label": "non_neg_integer",
"labelDetails": {
"description": "non_neg_integer/0",
"detail": "()"
},
"sortText": "00000030",
"tags": []
},
{
"deprecated": false,
"detail": "typespec none()",
"documentation": {
"kind": "markdown",
"value": "The bottom type, contains no terms"
},
"insertText": "none()",
"insertTextFormat": 2,
"kind": 7,
"label": "none",
"labelDetails": {
"description": "none/0",
"detail": "()"
},
"sortText": "00000031",
"tags": []
},
{
"deprecated": false,
"detail": "typespec nonempty_charlist()",
"documentation": {
"kind": "markdown",
"value": "A non-empty list of `char()`\n\n```\n@type nonempty_charlist() :: [\n char(),\n ...\n]\n```\n"
},
"insertText": "nonempty_charlist()",
"insertTextFormat": 2,
"kind": 7,
"label": "nonempty_charlist",
"labelDetails": {
"description": "nonempty_charlist/0",
"detail": "()"
},
"sortText": "00000032",
"tags": []
},
{
"deprecated": false,
"detail": "typespec nonempty_improper_list(type1, type2)",
"documentation": {
"kind": "markdown",
"value": "Improper list (type1=contents, type2=termination)"
},
"insertText": "nonempty_improper_list($0)",
"insertTextFormat": 2,
"kind": 7,
"label": "nonempty_improper_list",
"labelDetails": {
"description": "nonempty_improper_list/2",
"detail": "(type1, type2)"
},
"sortText": "00000033",
"tags": []
},
{
"deprecated": false,
"detail": "typespec nonempty_list",
"documentation": {
"kind": "markdown",
"value": "A non-empty list\n\n```\n@type nonempty_list ::\n nonempty_list(any())\n```\n"
},
"insertText": "nonempty_list()",
"insertTextFormat": 2,
"kind": 7,
"label": "nonempty_list",
"labelDetails": {
"description": "nonempty_list/0",
"detail": "()"
},
"sortText": "00000034",
"tags": []
},
{
"deprecated": false,
"detail": "typespec nonempty_list(t)",
"documentation": {
"kind": "markdown",
"value": "Non-empty proper list"
},
"insertText": "nonempty_list($0)",
"insertTextFormat": 2,
"kind": 7,
"label": "nonempty_list",
"labelDetails": {
"description": "nonempty_list/1",
"detail": "(t)"
},
"sortText": "00000035",
"tags": []
},
{
"deprecated": false,
"detail": "typespec nonempty_maybe_improper_list()",
"documentation": {
"kind": "markdown",
"value": "An alias for `nonempty_maybe_improper_list(any(), any())`\n\n```\n@type nonempty_maybe_improper_list() ::\n nonempty_maybe_improper_list(\n any(),\n any()\n )\n```\n"
},
"insertText": "nonempty_maybe_improper_list()",
"insertTextFormat": 2,
"kind": 7,
"label": "nonempty_maybe_improper_list",
"labelDetails": {
"description": "nonempty_maybe_improper_list/0",
"detail": "()"
},
"sortText": "00000036",
"tags": []
},
{
"deprecated": false,
"detail": "typespec nonempty_maybe_improper_list(type1, type2)",
"documentation": {
"kind": "markdown",
"value": "Non-empty proper or improper list"
},
"insertText": "nonempty_maybe_improper_list($0)",
"insertTextFormat": 2,
"kind": 7,
"label": "nonempty_maybe_improper_list",
"labelDetails": {
"description": "nonempty_maybe_improper_list/2",
"detail": "(type1, type2)"
},
"sortText": "00000037",
"tags": []
},
{
"deprecated": false,
"detail": "typespec number()",
"documentation": {
"kind": "markdown",
"value": "An integer or a float\n\n```\n@type number() ::\n integer() | float()\n```\n"
},
"insertText": "number()",
"insertTextFormat": 2,
"kind": 7,
"label": "number",
"labelDetails": {
"description": "number/0",
"detail": "()"
},
"sortText": "00000038",
"tags": []
},
{
"deprecated": false,
"detail": "typespec pid()",
"documentation": {
"kind": "markdown",
"value": "A process identifier, pid, identifies a process"
},
"insertText": "pid()",
"insertTextFormat": 2,
"kind": 7,
"label": "pid",
"labelDetails": {
"description": "pid/0",
"detail": "()"
},
"sortText": "00000039",
"tags": []
},
{
"deprecated": false,
"detail": "typespec port()",
"documentation": {
"kind": "markdown",
"value": "A port identifier identifies an Erlang port"
},
"insertText": "port()",
"insertTextFormat": 2,
"kind": 7,
"label": "port",
"labelDetails": {
"description": "port/0",
"detail": "()"
},
"sortText": "00000040",
"tags": []
},
{
"deprecated": false,
"detail": "typespec pos_integer()",
"documentation": {
"kind": "markdown",
"value": "A positive integer"
},
"insertText": "pos_integer()",
"insertTextFormat": 2,
"kind": 7,
"label": "pos_integer",
"labelDetails": {
"description": "pos_integer/0",
"detail": "()"
},
"sortText": "00000041",
"tags": []
},
{
"deprecated": false,
"detail": "typespec reference()",
"documentation": {
"kind": "markdown",
"value": "A reference is a term that is unique in an Erlang runtime system, created by calling `make_ref/0`"
},
"insertText": "reference()",
"insertTextFormat": 2,
"kind": 7,
"label": "reference",
"labelDetails": {
"description": "reference/0",
"detail": "()"
},
"sortText": "00000042",
"tags": []
},
{
"deprecated": false,
"detail": "typespec struct()",
"documentation": {
"kind": "markdown",
"value": "A struct\n\n```\n@type struct() :: %{\n :__struct__ => atom(),\n optional(atom()) => any()\n}\n```\n"
},
"insertText": "struct()",
"insertTextFormat": 2,
"kind": 7,
"label": "struct",
"labelDetails": {
"description": "struct/0",
"detail": "()"
},
"sortText": "00000043",
"tags": []
},
{
"deprecated": false,
"detail": "typespec term()",
"documentation": {
"kind": "markdown",
"value": "Same as `any()`\n\n```\n@type term() :: any()\n```\n"
},
"insertText": "term()",
"insertTextFormat": 2,
"kind": 7,
"label": "term",
"labelDetails": {
"description": "term/0",
"detail": "()"
},
"sortText": "00000044",
"tags": []
},
{
"deprecated": false,
"detail": "typespec timeout()",
"documentation": {
"kind": "markdown",
"value": "A non-negative integer or `:infinity`\n\n```\n@type timeout() ::\n :infinity\n | non_neg_integer()\n```\n"
},
"insertText": "timeout()",
"insertTextFormat": 2,
"kind": 7,
"label": "timeout",
"labelDetails": {
"description": "timeout/0",
"detail": "()"
},
"sortText": "00000045",
"tags": []
},
{
"deprecated": false,
"detail": "typespec tuple()",
"documentation": {
"kind": "markdown",
"value": "Tuple of any size"
},
"insertText": "tuple()",
"insertTextFormat": 2,
"kind": 7,
"label": "tuple",
"labelDetails": {
"description": "tuple/0",
"detail": "()"
},
"sortText": "00000046",
"tags": []
},
{
"command": {
"command": "editor.action.triggerParameterHints",
"title": "Trigger Parameter Hint"
},
"deprecated": false,
"detail": "(macro) Kernel.defexception(fields)",
"documentation": {
"kind": "markdown",
"value": "Defines an exception."
},
"insertText": "defexception [${1::message}]",
"insertTextFormat": 2,
"kind": 15,
"label": "defexception",
"labelDetails": {
"description": "Kernel.defexception/1",
"detail": "(fields)"
},
"sortText": "00000047",
"tags": []
},
{
"command": {
"command": "editor.action.triggerParameterHints",
"title": "Trigger Parameter Hint"
},
"deprecated": false,
"detail": "(macro) Kernel.defmacro(call, expr \\\\ nil)",
"documentation": {
"kind": "markdown",
"value": "Defines a public macro with the given name and body."
},
"insertText": "defmacro $1 do\n\t$0\nend",
"insertTextFormat": 2,
"kind": 15,
"label": "defmacro",
"labelDetails": {
"description": "Kernel.defmacro/2",
"detail": "(call, expr \\\\ nil)"
},
"sortText": "00000048",
"tags": []
},
{
"command": {
"command": "editor.action.triggerParameterHints",
"title": "Trigger Parameter Hint"
},
"deprecated": false,
"detail": "(macro) Kernel.defmacrop(call, expr \\\\ nil)",
"documentation": {
"kind": "markdown",
"value": "Defines a private macro with the given name and body."
},
"insertText": "defmacrop $1 do\n\t$0\nend",
"insertTextFormat": 2,
"kind": 15,
"label": "defmacrop",
"labelDetails": {
"description": "Kernel.defmacrop/2",
"detail": "(call, expr \\\\ nil)"
},
"sortText": "00000049",
"tags": []
},
{
"command": {
"command": "editor.action.triggerParameterHints",
"title": "Trigger Parameter Hint"
},
"deprecated": false,
"detail": "(macro) Kernel.defmodule(alias, do_block)",
"documentation": {
"kind": "markdown",
"value": "Defines a module given by name with the given contents."
},
"insertText": "defmodule LivebookApp$1 do\n\t$0\nend",
"insertTextFormat": 2,
"kind": 15,
"label": "defmodule",
"labelDetails": {
"description": "Kernel.defmodule/2",
"detail": "(alias, do_block)"
},
"sortText": "00000050",
"tags": []
},
{
"command": {
"command": "editor.action.triggerParameterHints",
"title": "Trigger Parameter Hint"
},
"deprecated": false,
"detail": "(macro) Kernel.defoverridable(keywords_or_behaviour)",
"documentation": {
"kind": "markdown",
"value": "Makes the given definitions in the current module overridable."
},
"insertText": "defoverridable($1)$0",
"insertTextFormat": 2,
"kind": 14,
"label": "defoverridable",
"labelDetails": {
"description": "Kernel.defoverridable/1",
"detail": "(keywords_or_behaviour)"
},
"sortText": "00000051",
"tags": []
},
{
"command": {
"command": "editor.action.triggerParameterHints",
"title": "Trigger Parameter Hint"
},
"deprecated": false,
"detail": "(macro) Kernel.defprotocol(name, do_block)",
"documentation": {
"kind": "markdown",
"value": "Defines a protocol."
},
"insertText": "defprotocol LivebookApp$1 do\n\t$0\nend",
"insertTextFormat": 2,
"kind": 15,
"label": "defprotocol",
"labelDetails": {
"description": "Kernel.defprotocol/2",
"detail": "(name, do_block)"
},
"sortText": "00000052",
"tags": []
}
]
} |
I'm out of ideas here. elixirLS returns a correct response here. From the spec https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_completion
|
So strange, the mystery continues |
I did some search on vscode github It seems the behaviour is by design
microsoft/vscode#71660 (comment)
microsoft/vscode#79516 (comment)
microsoft/vscode#109067 (comment) and referenced vscode docs https://github.com/microsoft/vscode/blob/1.78.2/src/vscode-dts/vscode.d.ts
microsoft/vscode#103682 (comment)
microsoft/vscode#79516 some ideas about one big isse fixed lately microsoft/vscode#164716 - microsoft/vscode#179988 So it may be worth experimenting with the ranges. There are no ranges in LSP contrary to vscode. It may be worth migrating from from LSP spec 3.17
|
So why is it that it sorts OK for you but not for me? |
Oh I reproduced it with setting So definitively it's not a bug but editor setting. |
After changes from e7c7a54 |
I went through some history of this and found this suggestion from @lukaszsamson #302 (comment) which solves the problem. It looks like |
I'm on the current version of Elixir LS and latest version of VSCode
Note how
do
is at the bottom. It should be at the top. This happens fordef
,defmodule
, etc... wheredo
should be priortized. This issue has been opened before and I have never seen it fixed properly.The text was updated successfully, but these errors were encountered: