diff options
-rw-r--r-- | lib/elixir/src/elixir_tokenizer.erl | 2 | ||||
-rw-r--r-- | lib/elixir/test/elixir/code_fragment_test.exs | 8 | ||||
-rw-r--r-- | lib/iex/test/iex/autocomplete_test.exs | 9 |
3 files changed, 13 insertions, 6 deletions
diff --git a/lib/elixir/src/elixir_tokenizer.erl b/lib/elixir/src/elixir_tokenizer.erl index d26a8bbf8..cca210161 100644 --- a/lib/elixir/src/elixir_tokenizer.erl +++ b/lib/elixir/src/elixir_tokenizer.erl @@ -1783,6 +1783,8 @@ prune_tokens([{kw_identifier_unsafe, _, _} | _] = Tokens, [], Terminators) -> %%% we usually skip operators, except these contextual ones prune_tokens([{type_op, _, '::'} | _] = Tokens, [], [{'<<', _, _} | _] = Terminators) -> {Tokens, Terminators}; +prune_tokens([{pipe_op, _, '|'} | _] = Tokens, [], [{'{', _, _} | _] = Terminators) -> + {Tokens, Terminators}; %%% or we traverse until the end. prune_tokens([_ | Tokens], Opener, Terminators) -> prune_tokens(Tokens, Opener, Terminators); diff --git a/lib/elixir/test/elixir/code_fragment_test.exs b/lib/elixir/test/elixir/code_fragment_test.exs index 2973de8fd..fe447d789 100644 --- a/lib/elixir/test/elixir/code_fragment_test.exs +++ b/lib/elixir/test/elixir/code_fragment_test.exs @@ -1136,11 +1136,19 @@ defmodule CodeFragmentTest do assert cc2q("%{bar:") == s2q("%{__cursor__()}") assert cc2q("%{bar: ") == s2q("%{bar: __cursor__()}") assert cc2q("%{bar: baz,") == s2q("%{bar: baz, __cursor__()}") + assert cc2q("%{foo | ") == s2q("%{foo | __cursor__()}") + assert cc2q("%{foo | bar:") == s2q("%{foo | __cursor__()}") + assert cc2q("%{foo | bar: ") == s2q("%{foo | bar: __cursor__()}") + assert cc2q("%{foo | bar: baz,") == s2q("%{foo | bar: baz, __cursor__()}") assert cc2q("%Foo") == s2q("__cursor__()") assert cc2q("%Foo{") == s2q("%Foo{__cursor__()}") assert cc2q("%Foo{bar: ") == s2q("%Foo{bar: __cursor__()}") assert cc2q("%Foo{bar: baz,") == s2q("%Foo{bar: baz, __cursor__()}") + assert cc2q("%Foo{foo | ") == s2q("%Foo{foo | __cursor__()}") + assert cc2q("%Foo{foo | bar:") == s2q("%Foo{foo | __cursor__()}") + assert cc2q("%Foo{foo | bar: ") == s2q("%Foo{foo | bar: __cursor__()}") + assert cc2q("%Foo{foo | bar: baz,") == s2q("%Foo{foo | bar: baz, __cursor__()}") end test "binaries" do diff --git a/lib/iex/test/iex/autocomplete_test.exs b/lib/iex/test/iex/autocomplete_test.exs index dd4a5be42..56b574020 100644 --- a/lib/iex/test/iex/autocomplete_test.exs +++ b/lib/iex/test/iex/autocomplete_test.exs @@ -434,12 +434,9 @@ defmodule IEx.AutocompleteTest do test "completion for map keys in update syntax" do eval("map = %{some: 1, other: :ok, another: \"qwe\"}") - # Code.Fragment.container_cursor_to_quoted returns - # {:%{}, [line: 1], [{:__cursor__, [line: 1], []}]} - # and `map` variable and map update AST is lost - # assert {:yes, ~c"", entries} = expand(~c"%{map | ") - # assert ~c"some:" in entries - # assert ~c"other:" in entries + assert {:yes, ~c"", entries} = expand(~c"%{map | ") + assert ~c"some:" in entries + assert ~c"other:" in entries assert {:yes, ~c"", entries} = expand(~c"%{map | some: \"foo\",") assert ~c"some:" not in entries |