Shebang callback support in language bindings

Offen
#4,344 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Anfängerfreundlichkeit
30/100
Issue-Typ
Feature
Klarheit
Muss geklärt werden
Aktivitätsstatus
Aktiv
Tech-Stack
c, ruby, rust

Rechercherichtung

Start with the Rust binding callback branch and the referenced main_script option in ext/prism/extension.c, then compare how Prism’s language bindings handle parser options. The issue asks whether shebang processing belongs in Prism or in each binding, including the effects of flags such as -n on the AST. Done means that design question is resolved and the chosen behavior is supported consistently.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

related to https://github.com/fables-tales/rubyfmt/issues/916

Some files are only syntactically valid after they've been processed with shebang comments, e.g.

#!/usr/bin/env ruby -np
next

Currently, the way these are handled is by passing a shebang_callback which reads the flags and sets the appropriate options (like here in CRuby).

I'd like for rubyfmt to be able to support files like this, and as for the immediate solution it wouldn't be too hard to add support for shebang callbacks in the Rust bindings (I've got a branch with those changes), but I suppose my broader question is whether or not language bindings all having to reinvent shebang handling is the desired end result.

Right now, this example also fails in the prism gem (Prism::parse('#!/usr/bin/env ruby -np\nnext') returns errors), and presumably does the same for all the language bindings, and yet echo '#!/usr/bin/ruby -n\nnext' | ruby -c says the syntax is OK, which is somewhat surprising and leads to things like ruby-lsp also reporting errors on similar files. That said, a reasonable argument for Prism not doing this handling by default is that some shebang flags (like -n) result in nodes being inserted into the AST, and it might not be ideal to do that without some kind of explicit choice -- though as it currently stands it does require the main_script option to be set, which may be sufficient.

So my question is, is the preferred approach for users of Prism to re-implement shebang handling (and it can be exposed as an option by the various language bindings), or is there some world where Prism itself handles shebangs?

Vorherrschende Sprache
C
Sterne
1k
Forks
202
Ø Merge
6 Std. 18 Min.
Gemergte PRs (30 T.)
77

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus ruby/prism

Alle Issues in ruby/prism

Ähnliche Issues

Weitere Issues zu C

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.