Fix analyzer pushing SHADOWED_VARIABLE warning for members shadowed in subclasses

This fixes a bug in the analyzer where it did not push the SHADOWED_VARIABLE_BASE_CLASS
warning for members shadowed by variable in subclass. It does this by comparing the class
which contains the shadowed member with the class containing the variable, and pushing
SHADOWED_VARIABLE only if the classes are the same. Additionally, SHADOWED_VARIABLE_BASE_CLASS
can take an extra symbol which helps to specify the line for non native base class.
This commit is contained in:
girdenis-p
2024-11-06 00:37:18 +00:00
parent 87318a2fb7
commit 413490c270
15 changed files with 86 additions and 45 deletions

View File

@@ -6,6 +6,6 @@ GDTEST_OK
>> WARNING
>> Line: 5
>> SHADOWED_VARIABLE
>> The local variable "a" is shadowing an already-declared variable at line 1.
>> The local variable "a" is shadowing an already-declared variable at line 1 in the current class.
1
2

View File

@@ -10,6 +10,6 @@ GDTEST_OK
>> WARNING
>> Line: 5
>> SHADOWED_VARIABLE
>> The local variable "a" is shadowing an already-declared variable at line 1.
>> The local variable "a" is shadowing an already-declared variable at line 1 in the current class.
1
2

View File

@@ -6,7 +6,7 @@ GDTEST_OK
>> WARNING
>> Line: 6
>> SHADOWED_VARIABLE
>> The local variable "a" is shadowing an already-declared variable at line 1.
>> The local variable "a" is shadowing an already-declared variable at line 1 in the current class.
1
2
1

View File

@@ -2,5 +2,5 @@ GDTEST_OK
>> WARNING
>> Line: 4
>> SHADOWED_VARIABLE
>> The local function parameter "shadow" is shadowing an already-declared variable at line 1.
>> The local function parameter "shadow" is shadowing an already-declared variable at line 1 in the current class.
shadow

View File

@@ -0,0 +1,7 @@
class_name ShadowingBase
const base_const_member = 1
var base_variable_member
func base_function_member():
pass

View File

@@ -1,4 +1,5 @@
class_name ShadowedClass
extends ShadowingBase
var member: int = 0
@@ -7,6 +8,7 @@ var print_debug := 'print_debug'
var print := 'print'
@warning_ignore("unused_variable")
@warning_ignore("unused_local_constant")
func test():
var Array := 'Array'
var Node := 'Node'
@@ -15,5 +17,8 @@ func test():
var member := 'member'
var reference := 'reference'
var ShadowedClass := 'ShadowedClass'
var base_variable_member
const base_function_member = 1
var base_const_member
print('warn')

View File

@@ -1,34 +1,46 @@
GDTEST_OK
>> WARNING
>> Line: 5
>> Line: 6
>> SHADOWED_GLOBAL_IDENTIFIER
>> The variable "print_debug" has the same name as a built-in function.
>> WARNING
>> Line: 11
>> Line: 13
>> SHADOWED_GLOBAL_IDENTIFIER
>> The variable "Array" has the same name as a built-in type.
>> WARNING
>> Line: 12
>> Line: 14
>> SHADOWED_GLOBAL_IDENTIFIER
>> The variable "Node" has the same name as a native class.
>> WARNING
>> Line: 13
>> Line: 15
>> SHADOWED_GLOBAL_IDENTIFIER
>> The variable "is_same" has the same name as a built-in function.
>> WARNING
>> Line: 14
>> Line: 16
>> SHADOWED_GLOBAL_IDENTIFIER
>> The variable "sqrt" has the same name as a built-in function.
>> WARNING
>> Line: 15
>> SHADOWED_VARIABLE
>> The local variable "member" is shadowing an already-declared variable at line 3.
>> WARNING
>> Line: 16
>> SHADOWED_VARIABLE_BASE_CLASS
>> The local variable "reference" is shadowing an already-declared method at the base class "RefCounted".
>> WARNING
>> Line: 17
>> SHADOWED_VARIABLE
>> The local variable "member" is shadowing an already-declared variable at line 4 in the current class.
>> WARNING
>> Line: 18
>> SHADOWED_VARIABLE_BASE_CLASS
>> The local variable "reference" is shadowing an already-declared method in the base class "RefCounted".
>> WARNING
>> Line: 19
>> SHADOWED_GLOBAL_IDENTIFIER
>> The variable "ShadowedClass" has the same name as a global class defined in "shadowning.gd".
>> WARNING
>> Line: 20
>> SHADOWED_VARIABLE_BASE_CLASS
>> The local variable "base_variable_member" is shadowing an already-declared variable at line 4 in the base class "ShadowingBase".
>> WARNING
>> Line: 21
>> SHADOWED_VARIABLE_BASE_CLASS
>> The local constant "base_function_member" is shadowing an already-declared function at line 6 in the base class "ShadowingBase".
>> WARNING
>> Line: 22
>> SHADOWED_VARIABLE_BASE_CLASS
>> The local variable "base_const_member" is shadowing an already-declared constant at line 3 in the base class "ShadowingBase".
warn

View File

@@ -6,4 +6,4 @@ GDTEST_OK
>> WARNING
>> Line: 8
>> SHADOWED_VARIABLE
>> The local constant "TEST" is shadowing an already-declared constant at line 2.
>> The local constant "TEST" is shadowing an already-declared constant at line 2 in the current class.

View File

@@ -6,4 +6,4 @@ GDTEST_OK
>> WARNING
>> Line: 8
>> SHADOWED_VARIABLE
>> The local variable "foo" is shadowing an already-declared variable at line 1.
>> The local variable "foo" is shadowing an already-declared variable at line 1 in the current class.

View File

@@ -6,4 +6,4 @@ GDTEST_OK
>> WARNING
>> Line: 2
>> SHADOWED_VARIABLE
>> The local variable "test" is shadowing an already-declared function at line 1.
>> The local variable "test" is shadowing an already-declared function at line 1 in the current class.

View File

@@ -2,11 +2,11 @@ GDTEST_OK
>> WARNING
>> Line: 5
>> SHADOWED_VARIABLE
>> The local function parameter "a" is shadowing an already-declared variable at line 3.
>> The local function parameter "a" is shadowing an already-declared variable at line 3 in the current class.
>> WARNING
>> Line: 15
>> SHADOWED_VARIABLE
>> The local function parameter "v" is shadowing an already-declared variable at line 13.
>> The local function parameter "v" is shadowing an already-declared variable at line 13 in the current class.
a
1
b