SempGrep Java -Regel für den Schattenfeldname mit der Variablen

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: SempGrep Java -Regel für den Schattenfeldname mit der Variablen

by Anonymous » 26 Aug 2025, 09:00

Wir haben SEMGREP, das wir als statisches Codeanalyse -Tool verwenden dürfen. Ich versuche, eine Java -Regel zu schreiben, die überprüft, ob der variable Name genau den gleichen Namen wie der Feldname in derselben Klasse hat. Jetzt frage ich mich, ob es überhaupt möglich ist.

Code: Select all

public class ShadowingExample {
// This is a class field.
private String name = "Class Field";

public void example() {
String name = "Local Variable"; // The local variable 'name' shadows the field.

System.out.println("The class field is: " + this.name);
System.out.println("The local variable is: " + name);
}

public void anotherExample() {
System.out.println("Do something else first")
String name = "Local Variable"; // The local variable 'name' also shadows the field.

System.out.println("The class field is: " + this.name);
System.out.println("The local variable is: " + name);
}
}
Erster Ansatz, von dem ich dachte

Code: Select all

patterns:
- pattern: |
class $CLASS_NAME {
...
$FIELD_TYPE $SHADOW_NAME;
...
$RETURN_TYPE $METHOD_NAME(...) {
...
$VARL_TYPE $SHADOW_NAME =...;
...
}
}
Ich dachte, es könnte funktionieren, da es denselben Shadow_Name wie der Feldname und als Variablenname verwendet. Es zeigt jedoch 0 Übereinstimmungen für den obigen Java-Code. < /P>
Der zweite Ansatz, den ich verwendet habe

Code: Select all

patterns:
- pattern-inside: |
class $CLASS_NAME {
$FIELD_TYPE $SHADOW_NAME;
...
}
- pattern: |
$RET $M(...) {
...
$VAR_TYPE $SHADOW_NAME = ...;
...
}
Dieser Ansatz zeigt Ergebnisse für beide Muster in der Trennung, aber die Muster , die sie mit und standardmäßig anschließen.patterns:
- pattern: |
class $CLASS_NAME {
...
$FIELD_TYPE $FIELD_NAME = ... ;
...
}
- pattern: |
$RETURN_TYPE $METHOD_NAME(...) {
...
$VAR_TYPE $VAR_NAME = ...;
...
}
- metavariable-comparison:
comparison: $VAR_NAME == $FIELD_NAME
< /code>
Ich habe diesen Vergleich erwartet, um die Namen dieser beiden Metavariablen zu überprüfen. Zwei erste Muster erzeugen Übereinstimmungen, aber wenn es um den Vergleich geht, erzeugt es 0 Erkenntnisse

Top