exercism / exercism/elixir-representer

Normalization of aliases and imports

未關閉
#40 2 則留言 1 個 reaction 已指派 0 人 在 GitHub 檢視
x:action/improve x:knowledge/elementary x:module/representer x:size/large x:type/coding
主要語言
Elixir
星號
11
分支
8
平均合併
11 天 3 小時
30 天內合併 PR
1

描述

Aliases and imports usually refer to external functions so names should be handled accordingly

## Example input

```elixir
defmodule A do
import B, only: [b_function: 1]
import C, except: [c_function: 1]
alias D, as: Dog
def use_b(x), do: x |> b_function
def use_c(c_function), do: c_function(0)
def use_d(y), do: Dog.sniff(y)
end
```

## Desired output

```elixir
defmodule(PLACEHOLDER_1) do
import(B, only: [b_function: 1])
import(C, except: [c_function: 1])
alias(D, as: PLACEHOLDER_2)
def(PLACEHOLDER_3(PLACEHOLDER_4)) do
PLACEHOLDER_4 |> b_function
end
def(PLACEHOLDER_5(PLACEHOLDER_6)) do
PLACEHOLDER_6(0)
end
def(PLACEHOLDER_7(PLACEHOLDER_8)) do
PLACEHOLDER_2.sniff(PLACEHOLDER_8)
end
end
```

`b_function` is imported so should appear as it is. `c_function` is excluded, so any mention of it is a local variable and should have a placeholder (current behavior already). `Dog` is an alias so should be replaced by a placeholder (possible overlap with #33).

## Current output

```elixir
defmodule(PLACEHOLDER_1) do
import(B, only: [b_function: 1])
import(C, except: [c_function: 1])
alias(D, as: Dog)
def(PLACEHOLDER_2(PLACEHOLDER_3)) do
PLACEHOLDER_3 |> PLACEHOLDER_4
end
def(PLACEHOLDER_5(PLACEHOLDER_6)) do
PLACEHOLDER_6(0)
end
def(PLACEHOLDER_7(PLACEHOLDER_8)) do
Dog.sniff(PLACEHOLDER_8)
end
end
```

In the case of `import X` where `X` is a standard library, it is possible to lookup all functions, so these should not de replaced either.

貢獻指南

這個儲存庫沒有索引到貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。