lifting from within user-defined macros can break compilation
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 35/100
Piste de recherche
Commencez par reproduire l’Example Input sur main et examinez comment styler remonte les aliases à travers des do-blocks imbriqués et gère les quote children. Comparez les deux corrections proposées, puis vérifiez que le code utilisant une macro définie par l’utilisateur se compile toujours sans alias externe inutilisé ni nom indéfini à l’intérieur de la macro.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Versions
currently on main, but 0.12 when it gets cut
Example Input
lifting is smart enough to not interact with quote children, but user-defined macros can hide that that's occurring.
defmodule Foo do
@moduledoc false
my_quote do
alias AliasFor.In.MyQuote
... Foo.Bar.Baz...
... Foo.Bar.Baz ...
end
end
results in:
defmodule Foo do
@moduledoc false
alias Foo.Bar.Baz
my_quote do
alias AliasFor.In.MyQuote
... Baz...
... Baz ...
end
end
but as with quote, the compiler will warn that Baz is unused within Foo, and anything that uses my_quote will then error on Baz being undefined
as-is, the user will have to put the alias where it belongs inside my_quote, which styler is just fine with and will leave be. still, i'd like styler to not leave a codebase uncompilable, even if it just requires a simple human fix
Fix
I see two possible
- never go into do blocks of unknown parents looking for liftable aliases (allowlist all kernel forms and nothing else)
- when a do-block contains a module directive, assume that it's equivalent to a
quoteblock and back out of it
there are pros and cons to each, but 2 probably gives the more correct result, with the downside being a more complex look-ahead implementation. actually, the real win might be doing a combination of both: when encounter directives in a nested scope, figure out if it's a known block parent. if it is, carry on. if it's not, assume this works as a quote does and don't lift
- Langage dominant
- Elixir
- Étoiles
- 810
- Forks
- 46
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Issues similaires
-
Good first issue: add elixir-phoenix-liveview stack budget preset (Elixir + Phoenix 1.8 + LiveView)Ouverteenhancement good first issue help wanted
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
Les mainteneurs répondent en général sous 1 jour
-
elixir priority-2 T5m technical user-feedback
Difficulté 1/5 Moins d'une heure Accessibilité débutants 76/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
wanderer-industries/wanderer#687 ·
-
Add Holistic Mentorship Dictation Usage Records table (af_lms#500)Peut-être pris @deepansh96 l’a pris il y a 1 jour. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
avantifellows/db-service#857 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 79/100
FarmBot/farmbot_os#1530 ·