[MIRROR] Adds a check grep for using src as a trait source rather that REF(src) [MDB IGNORE] (#23264)

* Adds a check grep for using `src` as a trait source rather that `REF(src)` (#77836)

## About The Pull Request

Using `src` as a trait source is an error and can often lead to
hard-deletes

If you wish to tie a source to a certain datum, it is common to use
`REF(src)` instead.

Ideally, we would lint or test for any use of a reference rather than a
string in use in trait sources, but that's a bit harder to setup.
Currently (from what I can see) the *only* erroneous use of references
as sources are via `src`, so it being the most common error, I see it
fine to lint for it.

## Changelog

Nothing player facing.

* Adds a check grep for using `src` as a trait source rather that `REF(src)`

* Update style.dm

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
This commit is contained in:
SkyratBot
2023-08-23 01:18:53 -04:00
committed by GitHub
co-authored by MrMelbert Giz
parent ab236fd886
commit 53955051d0
8 changed files with 25 additions and 13 deletions
@@ -21,7 +21,7 @@ GLOBAL_LIST_INIT(floor_diseases, list(
if(!isobj(parent))
return COMPONENT_INCOMPATIBLE
ADD_TRAIT(parent, TRAIT_GERM_SENSITIVE, src)
ADD_TRAIT(parent, TRAIT_GERM_SENSITIVE, REF(src))
RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(examine))
RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(handle_movement))
@@ -44,7 +44,7 @@ GLOBAL_LIST_INIT(floor_diseases, list(
handle_movement()
/datum/component/germ_sensitive/UnregisterFromParent()
REMOVE_TRAIT(parent, TRAIT_GERM_SENSITIVE, src)
REMOVE_TRAIT(parent, TRAIT_GERM_SENSITIVE, REF(src))
UnregisterSignal(parent, list(
COMSIG_ATOM_EXAMINE,
COMSIG_MOVABLE_MOVED,
+2 -2
View File
@@ -83,7 +83,7 @@
/datum/component/label/proc/apply_label()
var/atom/owner = parent
owner.name += " ([label_name])"
ADD_TRAIT(owner, TRAIT_HAS_LABEL, src)
ADD_TRAIT(owner, TRAIT_HAS_LABEL, REF(src))
owner.update_appearance(UPDATE_ICON)
/// Removes the label from the parent's name
@@ -91,5 +91,5 @@
var/atom/owner = parent
owner.name = replacetext(owner.name, "([label_name])", "") // Remove the label text from the parent's name, wherever it's located.
owner.name = trim(owner.name) // Shave off any white space from the beginning or end of the parent's name.
REMOVE_TRAIT(owner, TRAIT_HAS_LABEL, src)
REMOVE_TRAIT(owner, TRAIT_HAS_LABEL, REF(src))
owner.update_appearance(UPDATE_ICON)
+2 -2
View File
@@ -35,7 +35,7 @@
src.direction = direction
ADD_TRAIT(parent, TRAIT_HYPERSPACED, src)
ADD_TRAIT(parent, TRAIT_HYPERSPACED, REF(src))
RegisterSignals(parent, list(COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_UNBUCKLE, COMSIG_ATOM_NO_LONGER_PULLED), PROC_REF(update_state))
RegisterSignal(parent, SIGNAL_REMOVETRAIT(TRAIT_FREE_HYPERSPACE_MOVEMENT), PROC_REF(initialize_loop))
@@ -178,7 +178,7 @@
qdel(src)
/datum/component/shuttle_cling/Destroy(force, silent)
REMOVE_TRAIT(parent, TRAIT_HYPERSPACED, src)
REMOVE_TRAIT(parent, TRAIT_HYPERSPACED, REF(src))
QDEL_NULL(hyperloop)
return ..()
+2 -2
View File
@@ -98,7 +98,7 @@
RegisterSignal(src, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), PROC_REF(on_parent_multitool))
ADD_TRAIT(mob_parent, TRAIT_STYLISH, src) // SKYRAT EDIT ADD - allows style meter chads to do flips
ADD_TRAIT(mob_parent, TRAIT_STYLISH, REF(src)) // SKYRAT EDIT ADD - allows style meter chads to do flips
/datum/component/style/RegisterWithParent()
RegisterSignal(parent, COMSIG_MOB_ITEM_AFTERATTACK, PROC_REF(hotswap))
@@ -152,7 +152,7 @@
if(mob_parent.hud_used)
mob_parent.hud_used.static_inventory -= meter
mob_parent.hud_used.show_hud(mob_parent.hud_used.hud_version)
REMOVE_TRAIT(mob_parent, TRAIT_STYLISH, src) // SKYRAT EDIT ADD - allows style meter chads to do flips
REMOVE_TRAIT(mob_parent, TRAIT_STYLISH, REF(src)) // SKYRAT EDIT ADD - allows style meter chads to do flips
return ..()
@@ -11,4 +11,4 @@
. = ..()
ADD_TRAIT(src, TRAIT_FREE_HYPERSPACE_MOVEMENT, INNATE_TRAIT)
ADD_TRAIT(src, TRAIT_FREE_HYPERSPACE_MOVEMENT, TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT)
ADD_TRAIT(src, TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT, INNATE_TRAIT)
@@ -136,5 +136,5 @@
///Do any post-spawn edits you need to do
/datum/shuttle_event/simple_spawner/proc/post_spawn(atom/movable/spawnee)
ADD_TRAIT(spawnee, TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT, REF(src)) //Lets us spawn and move further away from the shuttle without being teleported into space
ADD_TRAIT(spawnee, TRAIT_DEL_ON_SPACE_DUMP, REF(src)) //if we hit the cordon, we get deleted. If the shuttle can make you, it can qdel you
ADD_TRAIT(spawnee, TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT, INNATE_TRAIT) //Lets us spawn and move further away from the shuttle without being teleported into space
ADD_TRAIT(spawnee, TRAIT_DEL_ON_SPACE_DUMP, INNATE_TRAIT) //if we hit the cordon, we get deleted. If the shuttle can make you, it can qdel you
@@ -2,8 +2,8 @@
spawning_list = list(/obj/effect/meteor)
/datum/shuttle_event/simple_spawner/meteor/post_spawn(atom/movable/spawnee)
ADD_TRAIT(spawnee, TRAIT_FREE_HYPERSPACE_MOVEMENT, src)
..()
. = ..()
ADD_TRAIT(spawnee, TRAIT_FREE_HYPERSPACE_MOVEMENT, INNATE_TRAIT)
/datum/shuttle_event/simple_spawner/meteor/spawn_movable(spawn_type)
var/turf/spawn_turf = get_spawn_turf()
+12
View File
@@ -140,6 +140,18 @@ if $grep 'can_perform_action\(\s*\)' $code_files; then
st=1
fi;
part "src as a trait source" # ideally we'd lint / test for ANY datum reference as a trait source, but 'src' is the most common.
if $grep -i '(add_trait|remove_trait)\(.+,\s*.+,\s*src\)' $code_files; then
echo
echo -e "${RED}ERROR: Using 'src' as a trait source. Source must be a string key - dont't use references to datums as a source, perhaps use 'REF(src)'.${NC}"
st=1
fi;
if $grep -i '(add_traits|remove_traits)\(.+,\s*src\)' $code_files; then
echo
echo -e "${RED}ERROR: Using 'src' as trait sources. Source must be a string key - dont't use references to datums as sources, perhaps use 'REF(src)'.${NC}"
st=1
fi;
part "balloon_alert sanity"
if $grep 'balloon_alert\(".*"\)' $code_files; then
echo