Open casey opened 1 month ago
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)
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.
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.
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 ""
@g9wp This seems unrelated to the [script]
attribute.
@g9wp This seems unrelated to the
[script]
attribute.
This is a more general solution, [script]
is just equivalent to [cfg_attr(true, set shell)]
.
A
[script(…)]
attribute was added in #2259. See #1479 for discussion.The attribute is currently unstable.
Before stabilization:
script
the right name?script-interpreter
setting and allow an empty[script]
attribute.