hrzndhrn / recode

A linter with autocorrection and a refactoring tool.
MIT License
283 stars 15 forks source link

** (FunctionClauseError) no function clause matching in Recode.Context.get_aliases/3 #10

Closed kianmeng closed 1 year ago

kianmeng commented 2 years ago

Running on:

Steps to reproduce:

** (FunctionClauseError) no function clause matching in Recode.Context.get_aliases/3                                 

    The following arguments were given to Recode.Context.get_aliases/3:                                              

        # 1                                                                                                          
        nil                                                                                                          

        # 2                                                                                                          
        [trailing_comments: [], leading_comments: [], line: 246, column: 5]                                          

        # 3                                                                                                          
        %Recode.Context{aliases: [{Recode.Context, [trailing_comments: [], leading_comments: [], end_of_expression: [
newlines: 1, line: 76, column: 23], line: 76, column: 3], nil}, {Sourceror.Zipper, [trailing_comments: [], leading_co
mments: [], end_of_expression: [newlines: 2, line: 77, column: 25], line: 77, column: 3], nil}], assigns: %{}, defini
tion: {{:defp, :do_traverse, 3}, [trailing_comments: [], leading_comments: [], end_of_expression: [newlines: 2, line:
 250, column: 6], do: [line: 245, column: 78], end: [line: 250, column: 3], line: 245, column: 3]}, doc: nil, impl: nil, imports: [{Recode.Utils, [trailing_comments: [], leading_comments: [], end_of_expression: [newlines: 2, [14/2354]
 column: 45], line: 74, column: 3], [{{:__block__, [trailing_comments: [], leading_comments: [], format: :keyword, li
ne: 74, column: 24], [:only]}, {:__block__, [trailing_comments: [], leading_comments: [], closing: [line: 74, column:
 44], line: 74, column: 30], [[{{:__block__, [trailing_comments: [], leading_comments: [], format: :keyword, line: 74
, column: 31], [:ends_with?]}, {:__block__, [trailing_comments: [], leading_comments: [], token: "2", line: 74, colum
n: 43], [2]}}]]}}]}], module: {Recode.Context, [trailing_comments: [], leading_comments: [], do: [line: 1, column: 26
], end: [line: 602, column: 1], line: 1, column: 1]}, moduledoc: {:@, [trailing_comments: [], leading_comments: [], e
nd_of_expression: [newlines: 2, line: 72, column: 6], line: 2, column: 3], [{:moduledoc, [trailing_comments: [], lead
ing_comments: [], line: 2, column: 4], [{:sigil_S, [trailing_comments: [], leading_comments: [], delimiter: "'''", li
ne: 2, column: 14], [{:<<>>, [trailing_comments: [], leading_comments: [], indentation: 2, line: 2, column: 14], ["Th
is moudle provides functions to traverse an AST with a `%Context{}`.\n\n## Examples\n\nThe following example shows th
e `%Context{}` for the definition of\n`MyApp.Bar.bar/1`.\n\n    iex> alias Recode.{Source, Context}\n    ...> \"\"\"\
n    ...> defmodule MyApp.Foo do\n    ...>   def foo, do: :foo\n    ...> end\n    ...>\n    ...> defmodule MyApp.Bar 
do\n    ...>   alias MyApp.Foo\n    ...>\n    ...>   def bar(x) do\n    ...>     {Foo.foo(), x}\n    ...>   end\n    
...> end\n    ...> \"\"\"\n    ...> |> Source.from_string()\n    ...> |> Source.zipper()\n    ...> |> Context.travers
e(nil, fn\n    ...>   zipper, context, nil ->\n    ...>     case context.definition do\n    ...>       {{:def, :bar, 
1}, _meta} -> {zipper, context, context}\n    ...>       _def -> {zipper, context, nil}\n    ...>     end\n    ...>  
 zipper, context, acc ->\n    ...>     {zipper, context, acc}\n    ...> end)\n    ...> |> elem(1)\n    %Context{\n   
   aliases: [\n        {MyApp.Foo,\n         [\n           trailing_comments: [],\n           leading_comments: [],\n
           end_of_expression: [newlines: 2, line: 6, column: 18],\n           line: 6,\n           column: 3\n       
  ], nil}\n      ],\n      assigns: %{},\n      definition:\n        {{:def, :bar, 1},\n         [\n           traili
ng_comments: [],\n           leading_comments: [],\n           do: [line: 8, column: 14],\n           end: [line: 10,
 column: 3],\n           line: 8,\n           column: 3\n         ]},\n      imports: [],\n      module:\n        {My
App.Bar,\n         [\n           trailing_comments: [],\n           leading_comments: [],\n           do: [line: 5, c
olumn: 21],\n           end: [line: 11, column: 1],\n           line: 5,\n           column: 1\n         ]},\n      r
equirements: [],\n      usages: []\n    }\n"]}, []]}]}]}, requirements: [], spec: nil, usages: []}
    Attempted function clauses (showing 3 out of 3):

        defp get_aliases(-[{{:., _, [alias, :{}]}, _, aliases}]-, +meta+, +%Recode.Context{} = context+)
        defp get_aliases(-[arg]-, +meta+, +context+)
        defp get_aliases(-[arg, opts]-, +meta+, +context+) 

    (recode 0.1.0) lib/recode/context.ex:516: Recode.Context.get_aliases/3
    (recode 0.1.0) lib/recode/context.ex:365: Recode.Context.do_traverse/4
    (sourceror 0.11.1) lib/sourceror/zipper.ex:497: Sourceror.Zipper.do_traverse_while/3
    (recode 0.1.0) lib/recode/context.ex:441: Recode.Context.do_traverse_sub/5
    (sourceror 0.11.1) lib/sourceror/zipper.ex:497: Sourceror.Zipper.do_traverse_while/3
    (recode 0.1.0) lib/recode/context.ex:441: Recode.Context.do_traverse_sub/5
    (sourceror 0.11.1) lib/sourceror/zipper.ex:497: Sourceror.Zipper.do_traverse_while/3
    (recode 0.1.0) lib/recode/context.ex:220: Recode.Context.traverse/3
NickNeck commented 2 years ago

Thanks for reporting. I will take a look the next days.

lud commented 2 years ago

Hello,

Recode also fails to parse import :timer and require alias MyApp.MyModule

NickNeck commented 2 years ago

@lud thanks for reporting, I will take a look.

NickNeck commented 1 year ago

I have opened a new issue for "Recode also fails to parse import :timer and require alias MyApp.MyModule"