Reference variables in parameter type regular expressions
🤔 What's the problem you're trying to solve?
We have some large parameter-types which we would like to use both in *.feature files and also in our typescript code. Small example how we have to do it currently (some of our types are much, much larger):
defineParameterType({
name: 'MyType',
regexp: /"(Value1|Value2|Value3)"/,
transformer: (s) => s,
});
type MyType = 'Value1' | 'Value2' | 'Value3';
As you can see, we need to duplicate all type values.
✨ What's your proposed solution?
We tried a solution like this:
const typeValues = [ 'Value1', 'Value2', 'Value3' ];
defineParameterType({
name: 'MyType',
regexp: new RegExp(`"(${typeValues.join('|')})"`),
transformer: (s) => s,
});
type MyType = Exclude<typeof typeValues[number], undefined>;
Here the values are only defined once in typeValues without needing to repeat them. The CucumberJS runner also runs the scenario fine. But, the VSCode extension does not recognize the step anymore and marks it as not existing.
Is it possible that defineParameterType() can accept a variable for the regexp parameter?
⛏ Have you considered any alternatives or workarounds?
📚 Any additional context?
I tried to solve the same problem. I found that this is not a problem of the plugin (this repo), but the language-service. And it is a huge problem. The language service does not operate on the executed javascript, but on the source text. It does not execute the source text, but looks at the syntax tree. I fear that they won't change that in the near future, it would change most of the current architecture.