Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stabilize [script(…)] attribute #2260

Open
casey opened this issue Jul 18, 2024 · 6 comments
Open

Stabilize [script(…)] attribute #2260

casey opened this issue Jul 18, 2024 · 6 comments

Comments

@casey
Copy link
Owner

casey commented Jul 18, 2024

A [script(…)] attribute was added in #2259. See #1479 for discussion.

The attribute is currently unstable.

Before stabilization:

  • Make sure it's tested and has the right semantics.
  • Is script the right name?
  • Consider renaming "shebang recipes" in readme to "script recipes" and consider both shebang recipes and recipes with the script attribute as cases of script recipes.
  • Add a script-interpreter setting and allow an empty [script] attribute.
@linux-china
Copy link
Contributor

linux-china commented Jul 19, 2024

Is it possible to add ext name support for script annotation:

[script("pluto")]
[extension: 'lua']
foo:
  print(os.getenv("NICK"))

And following code is clean.

[script("pluto", "lua")]
foo:
  print(os.getenv("NICK"))

If you use JavaScript/Types, lots of extension names: js, cjs, mjs, ts, mts.

[script("bun", "ts")]
foo:
  let name: string = "jackie"
  console.log(name)

@casey
Copy link
Owner Author

casey commented Jul 19, 2024

I think that would probably be confusing, and using an additional attribute for the extension isn't much of a burden. But note that an extension is only required if the interpreter requires one. Most don't, in fact the only interpreters I know if that will fail without the correct extension is cmd.exe and PowerShell.

@casey
Copy link
Owner Author

casey commented Jul 20, 2024

Also, one more reason for not stabilizing the [script] annotation right away: Since this is a new attribute, while it is unstable it is possible in a backwards compatible way to change the semantics of recipes with that attribute. In #1413 I discussed some shortcomings with shebang recipes, and discussed a lot of somewhat radical ideas for changing the semantics of recipes with a [script] attribute. Ultimately I don't think any of those were great ideas, and I don't have any particular ideas for changing the semantics of recipes with the [script] attribute, but I think it's a good idea to let it stew for a bit in case anyone can come up with some.

@g9wp
Copy link

g9wp commented Jul 24, 2024

I wonder if there's a way to conditionally includes settings or variables to recipt like the cfg_attr in rust.

  SH := "sh"

  [cfg_attr(unix, ```
     set shell := ["bash", "-c"]   // setting 
     SH := bash                    // variable
  ```)]
  [cfg_attr(windows, ```
     set shell := ["cmd", "/c"]
     SH := cmd
  ```)]
  [cfg_attr(cygwin, ```
     set shell := ["bash", "-c"]   // overwrite windows
     SH := cygwin
     CYGWIN := 1
  ```)]
  [cfg_attr(true, ```
     set unstable
     UNSTABLE := 1
  ```)]
  foo:
    echo {{SH}} // print "cygwin" or "bash" or "cmd"
    echo {{CYGWIN}} // print "1" or ""
    echo {{UNSTABLE}} // print "1"
  
  bar:
    echo {{SH}} // print "sh"
    echo {{CYGWIN}} // print ""
    echo {{UNSTABLE}} // print ""

@casey
Copy link
Owner Author

casey commented Jul 24, 2024

@g9wp This seems unrelated to the [script] attribute.

@g9wp
Copy link

g9wp commented Jul 24, 2024

@g9wp This seems unrelated to the [script] attribute.

This is a more general solution, [script] is just equivalent to [cfg_attr(true, set shell)].

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants