godot: `@warning_ignore()` annotation don't work with all warnings

Godot version

4.0.dev.custom_build.096a13b3b

System information

Linux, 5.16.0-1-MANJARO

Issue description

The annotation “@warning_ignore” don’t ignore all warnings properly, some are still raised even with the annotation

Properly ignored warnings:

  • UNASSIGNED_VARIABLE
  • UNUSED_VARIABLE
  • UNUSED_LOCAL_CONSTANT
  • SHADOWED_VARIABLE
  • VOID_ASSIGNMENT
  • NARROWING_CONVERSION
  • INCOMPATIBLE_TERNARY
  • INTEGER_DIVISION
  • ASSERT_ALWAYS_TRUE
  • ASSERT_ALWAYS_FALSE
  • REDUNDANT_AWAIT

Not ignored warnings:

  • UNUSED_PARAMETER
  • UNASSIGNED_VARIABLE_OP_ASSIGN
  • STANDALONE_EXPRESSION
  • UNREACHABLE_CODE

Untested warnings:

  • SHADOWED_VARIABLE_BASE_CLASS (not sure what it is exactly)
  • UNUSED_PRIVATE_CLASS_VARIABLE (don’t know how to make private class variable)
  • UNREACHABLE_PATTERN (don’t know what it is)
  • STANDALONE_TERNARY (was raised as STANDALONE_EXPRESSION)
  • UNUSED_SIGNAL (was not raised)
  • RETURN_VALUE_DISCARDED (was not raised)

Steps to reproduce

Use this code as a new script and look at the warning section.

extends Node

@warning_ignore(unused_signal)
signal unused_signal # UNUSED_SIGNAL not shown
signal awaited_signal

class test_entity:
	var shadowed_variable
	var shadowed_variable_base_class
	var property_used_as_function
	var active
	
	func void_assign() -> void:
		return
	
	func get_two() -> int:
		return 2
	@warning_ignore(unused_parameter)
	func test_function(unused_parameter: int) -> void: # UNUSED_PARAMETER
		@warning_ignore(unassigned_variable)
		var unassigned_var # UNASSIGNED_VARIABLE
		var a = unassigned_var
		print(a)
		
		var unassigned_var_op_assign 
		@warning_ignore(unassigned_variable_op_assign)
		unassigned_var_op_assign += 1 # UNASSIGNED_VARIABLE_OP_ASSIGN
		print(unassigned_var_op_assign)
		
		@warning_ignore(unused_variable)
		var unused_variable = 1 # UNUSED_VARIABLE
		
		@warning_ignore(unused_local_constant)
		const unused_constant = 1 # UNUSED_LOCAL_CONSTANT
		@warning_ignore(shadowed_variable)
		var shadowed_variable = 2 # SHADOWED_VARIABLE
		print(shadowed_variable)
		
		@warning_ignore(standalone_expression)
		2 + 2 # STANDALONE_EXPRESSION
		
		@warning_ignore(void_assignment)
		var void_assignment = void_assign() # VOID_ASSIGNMENT
		print(void_assignment)
		
		var test_float : float = 3.3
		@warning_ignore(narrowing_conversion)
		var test_int : int = test_float # NARROWING_CONVERSION
		print("%f %d" % [test_float, test_int])
		
		@warning_ignore(incompatible_ternary)
		test_float = 1 if 1 > 2 else null #INCOMPATIBLE_TERNARY
		
		@warning_ignore(return_value_discarded)
		get_two() #RETURN_VALUE_DISCARDED not shown
		
		@warning_ignore(integer_division)
		test_int = test_int / test_int # INTEGER_DIVISION
		
		@warning_ignore(standalone_ternary)
		42 if active else 0 # raise STANDALONE_EXPRESSION instead of STANDALONE_TERNARY
		
		@warning_ignore(assert_always_true)
		assert(true) # ASSERT_ALWAYS_TRUE
		@warning_ignore(assert_always_false)
		assert(false) # ASSERT_ALWAYS_FALSE
		
		@warning_ignore(redundant_await)
		await null # REDUNDANT_AWAIT
		
		return
		@warning_ignore(unreachable_code)
		print("unreachable code") # UNREACHABLE_CODE
	
	
class entity_child extends test_entity:
	func bidule() -> void:
		@warning_ignore(shadowed_variable_base_class)
		var shadowed_variable_base_class = 2# SHADOWED_VARIABLE, should have been SHADOWED_VARIABLE_BASE_CLASS ?
		print(shadowed_variable_base_class)

Minimal reproduction project

test_warning_ignore.zip

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Reactions: 14
  • Comments: 21 (8 by maintainers)

Commits related to this issue

Most upvoted comments

Is there an update here?

There are no updates yet, as far as I know. I plan to take a look later (added to my TODO list).