xonixx / makesure

Simple task/command runner with declarative goals and dependencies
https://makesure.dev
MIT License
340 stars 5 forks source link

Parameterized goals #115

Closed xonixx closed 1 year ago

xonixx commented 1 year ago

Parameterized goals

The idea for this is inspired by #112. This should be much better and more generic alternative to #96.

This should allow such rewrite.

Related to this. Obviously this is being revised.

@goal files_created @params A B
@depends_on file_created @args $A
@depends_on file_created @args $B
@depends_on file_created @args '/tmp/file'
@depends_on goal_3_args @args $A '/tmp/file' $B

@goal file_created @params F
@reached_if [[ -f "$F" ]]
  echo hello > "$F"

Q. Default values.

No

Q. Optional values.

No

Q. How to pass var argument?

Q. Do we even need keyword @args?

Looks like we don’t need it to disambiguate. BUT this complicates resolution.

Q. Do we need keyword @params?

Looks like yes

Q. Do we allow to include parameterized goal in @depends_on together with other goals? Or only single?

No. @args will be only allowed in pos=3. All items afterwards are considered args.

Q. Shall we restrict the param name to Name123? [A-Z][A-Za-z0-9_]*

This might be good idea / convention.

Q. Can we make parameterized goals resolution during parsing? We might need to know the number of params for a goal which is not available yet, since goal may come later.

Looks like this is only possible if we restrict the syntax to

@depends_on param_goal @args 'hello'

I.e. when @args is at pos=3

@depends_on param_goal ( 'hello' A 'world' ) # needs more parsing

Q. Allow calling parameterized goal from CLI?

No

Q. Allow listing PG?

No. What about “instantiated” goals?

Q. Loops detection.

Based on goal name only? I.e. disallow depending PG on itself in any way.

Q. What can be @args VAR?

Only:

Q. Mechanism for "instantiation"

Also here. Need to adjust -d option. Should list instantiated goals in form

On encounter @depends_on generate instantiated? But this needs to go in-depth.