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

Robot: no tags for keywords starting with embedded arguments #1570

Closed
mMontu opened this issue Oct 5, 2017 · 2 comments
Closed

Robot: no tags for keywords starting with embedded arguments #1570

mMontu opened this issue Oct 5, 2017 · 2 comments

Comments

@mMontu
Copy link
Contributor

mMontu commented Oct 5, 2017

The keywords in Robot Framework can contain embedded arguments ("variables") in the middle of their definition. And the documentation doesn't seem to restrict their number or position.

But no tags are generated depending on the position of the embedded arguments. Given the following input file,

*** Variables ***
${myvar}    variable_value

*** Keywords ***

My Regular Keyword
    Sleep  5s

${embedded arg} Starting Single
    No Operation

${embedded arg1} Starting ${embedded arg2} Multiple
    No Operation

${embedded arg1} Starting And ${embedded arg2} Ending ${embedded arg3}
    No Operation

Middle ${embedded arg} Single Arguments
    No Operation

Middle ${embedded arg1} Multiple ${embedded arg2} Arguments
    No Operation

Ending Single ${embedded arg}
    No Operation

Ending Multiple ${embedded arg1} And ${embedded arg2}
    No Operation

, these are the tags generated:

!_TAG_FILE_FORMAT	2	/extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED	1	/0=unsorted, 1=sorted, 2=foldcase/
!_TAG_OUTPUT_MODE	u-ctags	/u-ctags or e-ctags/
!_TAG_PROGRAM_AUTHOR	Universal Ctags Team	//
!_TAG_PROGRAM_NAME	Universal Ctags	/Derived from Exuberant Ctags/
!_TAG_PROGRAM_URL	https://ctags.io/	/official site/
!_TAG_PROGRAM_VERSION	0.0.0	/924c0ab/
Ending Multiple ${embedded arg1} And ${embedded arg2}	temp3.robot	/^Ending Multiple ${embedded arg1} And ${embedded arg2}$/;"	k
Ending Single ${embedded arg}	temp3.robot	/^Ending Single ${embedded arg}$/;"	k
Ending_Multiple_${embedded_arg1}_And_${embedded_arg2}	temp3.robot	/^Ending Multiple ${embedded arg1} And ${embedded arg2}$/;"	k
Ending_Single_${embedded_arg}	temp3.robot	/^Ending Single ${embedded arg}$/;"	k
Middle ${embedded arg1} Multiple ${embedded arg2} Arguments	temp3.robot	/^Middle ${embedded arg1} Multiple ${embedded arg2} Arguments$/;"	k
Middle ${embedded arg} Single Arguments	temp3.robot	/^Middle ${embedded arg} Single Arguments$/;"	k
Middle_${embedded_arg1}_Multiple_${embedded_arg2}_Arguments	temp3.robot	/^Middle ${embedded arg1} Multiple ${embedded arg2} Arguments$/;"	k
Middle_${embedded_arg}_Single_Arguments	temp3.robot	/^Middle ${embedded arg} Single Arguments$/;"	k
My Regular Keyword	temp3.robot	/^My Regular Keyword$/;"	k
My_Regular_Keyword	temp3.robot	/^My Regular Keyword$/;"	k
myvar	temp3.robot	/^${myvar}    variable_value$/;"	v

Notice no tags are generated for the *** Starting keywords.
I've attempted to fix it by including an $ in the first part of the regex for Robot keywords, i.e., changing from

    addLanguageCallbackRegex (language, "(^[A-Za-z0-9]+([${}' _][-${}A-Za-z0-9]+)*)",

to

    addLanguageCallbackRegex (language, "(^[$A-Za-z0-9]+([${}' _][-${}A-Za-z0-9]+)*)",

Despite that solved the problem for the keywords starting with embedded arguments, the tags for regular variables weren't generated anymore.

I found that unexpected, as the regex for variables doesn't match the keywords starting with embedded arguments, because variables are required to have at least two spaces after the closing braces.

masatake added a commit to masatake/ctags that referenced this issue Oct 6, 2017
Input:

    *** Keywords ***

    ${embedded arg} Starting Single
	No Operation

Oputput:

    ${embedded arg} Starting Single	input.robot	/^${embedded arg} Starting Single$/;"	k

Close universal-ctags#1570.

Signed-off-by: Masatake YAMATO <[email protected]>
masatake added a commit to masatake/ctags that referenced this issue Oct 6, 2017
Input:

    *** Keywords ***

    ${embedded arg} Starting Single
	No Operation

Oputput:

    ${embedded arg} Starting Single	input.robot	/^${embedded arg} Starting Single$/;"	k

Close universal-ctags#1570.

Signed-off-by: Masatake YAMATO <[email protected]>
@masatake
Copy link
Member

masatake commented Oct 6, 2017

Thank you for reporting.

Try #1571.

A good test case drives me.

[jet@localhost]~/var/ctags% cat Units/parser-robot.r/keyword-started-from-varref.d/input.robot
cat Units/parser-robot.r/keyword-started-from-varref.d/input.robot
#
# This test input is taken from #1570 opened by @mMontu.
#
*** Variables ***
${myvar}    variable_value

*** Keywords ***

My Regular Keyword
    Sleep  5s

${embedded arg} Starting Single
    No Operation

${embedded arg1} Starting ${embedded arg2} Multiple
    No Operation

${embedded arg1} Starting And ${embedded arg2} Ending ${embedded arg3}
    No Operation

Middle ${embedded arg} Single Arguments
    No Operation

Middle ${embedded arg1} Multiple ${embedded arg2} Arguments
    No Operation

Ending Single ${embedded arg}
    No Operation

Ending Multiple ${embedded arg1} And ${embedded arg2}
    No Operation
[jet@localhost]~/var/ctags% ./ctags -o - Units/parser-robot.r/keyword-started-from-varref.d/input.robot
./ctags -o - Units/parser-robot.r/keyword-started-from-varref.d/input.robot
${embedded arg1} Starting ${embedded arg2} Multiple	Units/parser-robot.r/keyword-started-from-varref.d/input.robot	/^${embedded arg1} Starting ${embedded arg2} Multiple$/;"	k
${embedded arg1} Starting And ${embedded arg2} Ending ${embedded arg3}	Units/parser-robot.r/keyword-started-from-varref.d/input.robot	/^${embedded arg1} Starting And ${embedded arg2} Ending ${embedded arg3}$/;"	k
${embedded arg} Starting Single	Units/parser-robot.r/keyword-started-from-varref.d/input.robot	/^${embedded arg} Starting Single$/;"	k
${embedded_arg1}_Starting_${embedded_arg2}_Multiple	Units/parser-robot.r/keyword-started-from-varref.d/input.robot	/^${embedded arg1} Starting ${embedded arg2} Multiple$/;"	k
${embedded_arg1}_Starting_And_${embedded_arg2}_Ending_${embedded_arg3}	Units/parser-robot.r/keyword-started-from-varref.d/input.robot	/^${embedded arg1} Starting And ${embedded arg2} Ending ${embedded arg3}$/;"	k
${embedded_arg}_Starting_Single	Units/parser-robot.r/keyword-started-from-varref.d/input.robot	/^${embedded arg} Starting Single$/;"	k
Ending Multiple ${embedded arg1} And ${embedded arg2}	Units/parser-robot.r/keyword-started-from-varref.d/input.robot	/^Ending Multiple ${embedded arg1} And ${embedded arg2}$/;"	k
Ending Single ${embedded arg}	Units/parser-robot.r/keyword-started-from-varref.d/input.robot	/^Ending Single ${embedded arg}$/;"	k
Ending_Multiple_${embedded_arg1}_And_${embedded_arg2}	Units/parser-robot.r/keyword-started-from-varref.d/input.robot	/^Ending Multiple ${embedded arg1} And ${embedded arg2}$/;"	k
Ending_Single_${embedded_arg}	Units/parser-robot.r/keyword-started-from-varref.d/input.robot	/^Ending Single ${embedded arg}$/;"	k
Middle ${embedded arg1} Multiple ${embedded arg2} Arguments	Units/parser-robot.r/keyword-started-from-varref.d/input.robot	/^Middle ${embedded arg1} Multiple ${embedded arg2} Arguments$/;"	k
Middle ${embedded arg} Single Arguments	Units/parser-robot.r/keyword-started-from-varref.d/input.robot	/^Middle ${embedded arg} Single Arguments$/;"	k
Middle_${embedded_arg1}_Multiple_${embedded_arg2}_Arguments	Units/parser-robot.r/keyword-started-from-varref.d/input.robot	/^Middle ${embedded arg1} Multiple ${embedded arg2} Arguments$/;"	k
Middle_${embedded_arg}_Single_Arguments	Units/parser-robot.r/keyword-started-from-varref.d/input.robot	/^Middle ${embedded arg} Single Arguments$/;"	k
My Regular Keyword	Units/parser-robot.r/keyword-started-from-varref.d/input.robot	/^My Regular Keyword$/;"	k
My_Regular_Keyword	Units/parser-robot.r/keyword-started-from-varref.d/input.robot	/^My Regular Keyword$/;"	k
myvar	Units/parser-robot.r/keyword-started-from-varref.d/input.robot	/^${myvar}    variable_value$/;"	v

masatake added a commit to masatake/ctags that referenced this issue Oct 6, 2017
Input:

    *** Keywords ***

    ${embedded arg} Starting Single
	No Operation

Output:

    ${embedded arg} Starting Single	input.robot	/^${embedded arg} Starting Single$/;"	k

Close universal-ctags#1570.

Signed-off-by: Masatake YAMATO <[email protected]>
@mMontu
Copy link
Contributor Author

mMontu commented Oct 6, 2017

I was reading s/old-docs/EXTENDING.html but the changes are more complex than I anticipated.
Your solution works like I charm

Thanks you very much!!

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

2 participants