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

Issue with Rule #699

Open
rajeshchinnam opened this issue Sep 25, 2024 · 8 comments
Open

Issue with Rule #699

rajeshchinnam opened this issue Sep 25, 2024 · 8 comments

Comments

@rajeshchinnam
Copy link

rajeshchinnam commented Sep 25, 2024

Hi @danieltrt

I have below rule , which is working fine on tree sitter play ground
[[rules]]
name = "replace_boolean_parse_with_literal"
query = """
(
(if_statement
condition: (
parenthesized_expression
(method_invocation
object: (identifier) @object
name: (identifier) @name
arguments: (argument_list
(true)
)
) @method_invocation
)
) @if_statement
)
(#eq? @object "Boolean")
(#eq? @name "parseBoolean")
"""
replace_node = "parenthesized_expression"
replace = "true"
groups = ["replace_expression_with_boolean_literal"]

but when I am running on piranha

I am getting below error

pyo3_runtime.PanicException: Could not parse the query : "(\n\t(if_statement\n\t condition: (\n\t\tparenthesized_expression\n\t\t(method_invocation\n\t\t object: (identifier) @object\n\t\t name: (identifier) @name\n\t\t arguments: (argument_list\n\t\t\t(true)\n\t\t )\n\t\t) @method_invocation\n\t )\n\t) @if_statement\n)\n(#eq? @object "Boolean")\n(#eq? @name "parseBoolean")\n" Some(QueryError { row: 2, column: 3, offset: 20, message: "\t condition: (\n ^", kind: Structure })

any help on this is well appreciated
Thanks in advance

@ketkarameya
Copy link
Contributor

ketkarameya commented Sep 25, 2024

@rajeshchinnam I will get back to u in a day or two. I am busy with something urgent at work for next two days.

@rajeshchinnam
Copy link
Author

rajeshchinnam commented Sep 26, 2024

sure @ketkarameya I will be waiting for your response

one more scenario I have my method

public String get(String requestNumberPrefix, String request) {
if (tenantConfiguration.get(TenantConfigurationKey.FEATURE_SEQUENTIAL_NUMBERS_FOR_WARRANTY).equals("true")) {
log.info("request number prefix is {}", requestNumberPrefix);
Long nextSequenceId = getNextSequenceIdAndSave(requestNumberPrefix, request);
String sequenceNumber = String.format(REQUEST_NUMBER_FORMAT, nextSequenceId);
return requestNumberPrefix + sequenceNumber;
}
return generateRandomNumber();
}

with Rule
((
(method_invocation
(method_invocation
name: () @name
arguments: (argument_list
[
(field_access field: (
) @argument)
(_) @argument
]
)
)
name: (identifier) @identifiereq
arguments: (argument_list
[
(string_literal) @truevalue
]
)
)
)
(#eq? @name "get")
(#eq? @argument "TenantConfigurationKey.FEATURE_SEQUENTIAL_NUMBERS_FOR_WARRANTY")
(#eq? @identifiereq "equals")
(#eq? @truevalue ""true"")
)
This rule highlighting get(TenantConfigurationKey.FEATURE_SEQUENTIAL_NUMBERS_FOR_WARRANTY).equals("true") in piranha playground but when I run piranha its not finding the match

@rajeshchinnam
Copy link
Author

@ketkarameya can you please let me know what could be the issue here when you get some time.

@ketkarameya
Copy link
Contributor

ketkarameya commented Sep 30, 2024

@rajeshchinnam can you please make a demo repository with your code and whatever python script you have written? It will be easier to collaborate.

For instance, in your above rule I would do something like :

[[rules]]
name = "replace_boolean_parse_with_literal"
query = """
(
(method_invocation
object: (identifier) @object
name: (identifier) @name
arguments: (argument_list
(true)
)
) @method_invocation
)
(#eq? @object "Boolean")
(#eq? @name "parseBoolean")
"""
replace_node = "method_invocation"
replace = "true"
groups = ["replace_expression_with_boolean_literal"]

^ Just try to match your ff-api in the python script (using piranha's python api) and follow this example
https://github.com/uber/piranha/blob/master/POLYGLOT_README.md#stale-feature-flag-cleanup

@rajeshchinnam
Copy link
Author

rajeshchinnam commented Oct 1, 2024

Thanks @ketkarameya

Please refer

https://github.com/rajeshchinnam/piranha/blob/main/feature_flag_cleanup.py
https://github.com/rajeshchinnam/piranha/blob/main/configurations/rules.toml

I can able to fix the rule and I am trying to fix another use case

https://github.com/rajeshchinnam/piranha/tree/main/configurations

eg:

I want to remove the test method for the stale feature flags

@test
void shouldGetRandomValueIfFeatureIsDisabled() {
when(TenantConfiguration.get(TenantConfigurationKey.FEATURE_SEQUENTIAL_NUMBERS_FOR_WARRANTY)).thenReturn("false");
// TODO
}

can you please suggest the rule

@ketkarameya
Copy link
Contributor

you actually do not need to match the context.
So if u want to match TenantConfiguration.get(TenantConfigurationKey.FEATURE_SEQUENTIAL_NUMBERS_FOR_WARRANTY) just match this snippet replace it with true/false. Then you can add an edge that cleans up tautological expressions like when(true).thenReturn(true)

@rajeshchinnam
Copy link
Author

rajeshchinnam commented Oct 1, 2024

@ketkarameya

Please review my updated rule https://github.com/rajeshchinnam/piranha/blob/main/configurations/rules.toml

remove_method_with_specific_line : is updating
when(TenantConfiguration.get(TenantConfigurationKey.FEATURE_SEQUENTIAL_NUMBERS_FOR_WARRANTY)).thenReturn("false");

as

when("true").thenReturn("false");

https://github.com/rajeshchinnam/piranha/blob/main/src/main/java/com/piranha/DocumentInfoServiceTest.java

and my rule is

https://github.com/rajeshchinnam/piranha/blob/main/configurations/rules.toml

when i am testing this on play sitter its matching but running on piranha its not matching

Please suggest

@rajeshchinnam
Copy link
Author

I fixed it @ketkarameya

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