Open pervoj opened 3 years ago
I'll have to think about it.
I think there was some discussion in a thread on GNOME Builder's issue page about templating too. I hope that, for now at least, a command-line interface is rather useful.
@Prince781 will you mind if I make one
@Abdallah-Moh feel free
thanks
is there any way to enter the app name and the rest when calling the command
@Abdallah-Moh not currently. What context do you need to use this in?
the vscode extention
the user will be required to have valdo installed
the vscode extention
I mean more specifically, how to you plan to have the plugin interact with valdo? For example, are you going to rewrite the prompt in JS and intend to call valdo to instantiate the template? Walk me through your proposal.
What I will do is get all the required info from the user then use a node module to run valdo --data in here
@Abdallah-Moh how will you determine what information you need? Don't you need to analyze the template?
Yes I will get the template type at the beginning
@Abdallah-Moh so it looks like I'll need to make some changes to valdo for you. What do you think of this API?
% valdo eos --list-vars
{
"PROGRAM_NAME": {
"summary": "the name of the program",
"default": "/${PROJECT_NAME}/\\w+/\\u\\0/(\\w)?\\W+(\\w)?(\\w*)/\\1\\u\\2\\L\\3\\E/^\\w/\\u\\0/",
"pattern": "^[[:word:]-]+$"
},
"PROJECT_SUMMARY": {
"summary": "a very short summary of the project",
"default": "a new app for elementary OS"
},
"PROJECT_CATEGORIES": {
"summary": "categories (semicolon-separated)",
"pattern": "^((AudioVideo|Audio|Video|Development|Education|Game|Graphics|Network|Office|Science|Settings|System|Utility);)+$"
},
"PROJECT_KEYWORDS": {
"summary": "keywords (semicolon-separated)",
"default": "/${PROJECT_NAME}/\\W+/;/^;+//\\w+/\\L\\0\\E/[^;]$/\\0;/",
"pattern": "^(\\w+;)+$"
}
}
% valdo --list-builtin-vars
# will list all built-in variables
% valdo eos -DPROGRAM_NAME='valdo' -DPROJECT_VERSION='1.0.0' \
-DPROJECT_SUMMARY='a templating engine for Vala' -DPROJECT_CATEGORIES='System;Utility;' \
-DPROJECT_KEYWORDS='vala,templating' -o $DIRECTORY
Note, this is an example of how it would work with the eos
template.
looks nice for me
@Abdallah-Moh checkout and build wip/commands
and try getting your frontend to work with Valdo
@Prince781 is there an arg to get a list of all the templates
@Abdallah-Moh you can just run valdo
and it'll print out all of the templates. The output should be easy to parse.
e.g.
% valdo | tail -n +3 | awk '{print $1}'
lib
new
gtk
swifty-gtk4
eos
Maybe it would be better to parse the output using JS for better running support on Windows.
@pervoj Why would someone create a vala project on windows, and js is what is used to create vscode extentions
@Abdallah-Moh Maybe someone can start working on Linux and continue working on Windows. Otherwise, I think it's a shame to have a non-multiplatform extension for the multiplatform Valdo.
Yes, I know, I meant that I think it's better to parse the output right in the extension code.
@pervoj The extension will need valdo to run and valdo is not available for windows
@Abdallah-Moh You can compile Valdo on Windows without any problems. I also talked with @Prince781 about packaging for MSYS2 (where these commands but are available).
It's up to you, it was just a suggestion.
the extension will work if valdo is installed so yes it can work on windows if you install valdo
@Abdallah-Moh the example command I gave demonstrates that it's simple to parse valdo's output using a regex. I did not intend for you to execute that command.
I know
Is the feature added?
Try wip/commands
branch
I was busy but now I have time to work on the extension you can find it here https://github.com/Abdallah-Moh/vs-valdo
@Abdallah-Moh so it looks like I'll need to make some changes to valdo for you. What do you think of this API?
% valdo eos --list-vars { "PROGRAM_NAME": { "summary": "the name of the program", "default": "/${PROJECT_NAME}/\\w+/\\u\\0/(\\w)?\\W+(\\w)?(\\w*)/\\1\\u\\2\\L\\3\\E/^\\w/\\u\\0/", "pattern": "^[[:word:]-]+$" }, "PROJECT_SUMMARY": { "summary": "a very short summary of the project", "default": "a new app for elementary OS" }, "PROJECT_CATEGORIES": { "summary": "categories (semicolon-separated)", "pattern": "^((AudioVideo|Audio|Video|Development|Education|Game|Graphics|Network|Office|Science|Settings|System|Utility);)+$" }, "PROJECT_KEYWORDS": { "summary": "keywords (semicolon-separated)", "default": "/${PROJECT_NAME}/\\W+/;/^;+//\\w+/\\L\\0\\E/[^;]$/\\0;/", "pattern": "^(\\w+;)+$" } }
% valdo --list-builtin-vars # will list all built-in variables
% valdo eos -DPROGRAM_NAME='valdo' -DPROJECT_VERSION='1.0.0' \ -DPROJECT_SUMMARY='a templating engine for Vala' -DPROJECT_CATEGORIES='System;Utility;' \ -DPROJECT_KEYWORDS='vala,templating' -o $DIRECTORY
Note, this is an example of how it would work with the
eos
template.
@Prince781 can this return an array of objects and each object will contain the name and the rest
@Abdallah-Moh done. Do a git pull --rebase --force
I think.
@Prince781 The variable PROJECT_DIR
for example has a regex as a default value
I can substitute the variable ${PROJECT_NAME} with the project name but i do not know how should I run this regex in js to return the value needed
Try this: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
You can also init regex from string.
let re = new RegExp('ab+c', 'g');
g
for global search.
Than test with test()
method.
if (re.test(str)) {
…
}
@pervoj I know how to test regex in js, What I mean is how to use this pattern
/${PROJECT_NAME}/\\w+/\\u\\0/(\\w)?\\W+(\\w)?(\\w*)/\\1\\u\\2\\L\\3\\E/^\\w/\\u\\0/
@Abdallah-Moh read this carefully: https://github.com/Prince781/valdo#variable-substitution
Basically, this says "take ${PROJECT_NAME}
, then replace \w+
with \u\0
, then replace (\w)?\W+(\w)?(\w*)
with \1\u\2\L\3\E
, then replace ^\w
with \u\0
"
It's essentially ${SOURCE_VARIABLE}
then a string of regex-replace pairs. You'll have to parse this string. This is how it's done in Valdo:
https://github.com/Prince781/valdo/blob/023505e22d2c39a42ce582a0318770f25bfbd104/src/value.vala#L51
(Edited comment to unquote the regex.)
@Prince781 It looks like javascript literary searches for :word:
in regex did you mean \w
@Abdallah-Moh Yeah, you can replace [:word:]
with A-Za-z0-9_
.
Are you also planning to create a Valdo extension for VS Code?