commit - d801a397606024fb6e4e3bbbacca06bb055fc656
commit + 2dde17f520efd2390cb86337abb1738e34c9878d
blob - e62724c834e856b3d4c91e319b50ef2b80ebdcca
blob + f0cd683ae8b56776e52308477687dd6bbf1ac9f5
--- README.md
+++ README.md
- `basic/cmp_by_reference`
- `basic/fd_leak`
- `basic/func_inside_func`
+- `basic/immutable_looping_variables`
- `basic/loadstring`
- `basic/magic_number`
- `basic/pcall_err_handling`
blob - /dev/null
blob + 4c40f3a99a4b414d3fd5cbbe19e1c63a02c29eb8 (mode 644)
--- /dev/null
+++ rules/lua/basic/setting_looping_variables.lua
+local a = { "one", "two", "three" }
+for i, v in ipairs(a) do
+ -- ruleid: setting_looping_variables
+ v = 1
+ -- ruleid: setting_looping_variables
+ i = 2
+end
+
+for i in ipairs(a) do
+ -- ruleid: setting_looping_variables
+ i = 1
+end
+
+local b = { a = 1, b = 2, c = 3 }
+for k in pairs(b) do
+ -- ruleid: setting_looping_variables
+ k = 3
+end
+
+for k, v in pairs(b) do
+ -- ruleid: setting_looping_variables
+ k = 3
+ -- ruleid: setting_looping_variables
+ v = 3
+end
blob - /dev/null
blob + f19f2b1e1658affc577fa8cd6179b7be91c97058 (mode 644)
--- /dev/null
+++ rules/lua/basic/setting_looping_variables.yaml
+rules:
+ - id: setting_looping_variables
+ patterns:
+ - pattern-inside: |
+ for $K, $V in ... do
+ ...
+ end
+ for $K in ... do
+ ...
+ end
+ - pattern-not: |
+ for $K in ... do
+ ...
+ $K = ...
+ ...
+ end
+ for $K, $V in ... do
+ ...
+ $V = ...
+ ...
+ $K = ...
+ ...
+ end
+ message: |
+ In a loop the looping variables key and value are locals. So reassigning
+ them, it just changes the value referenced by the local variable. After
+ the first run of the loop, locals run out of scope and are discarded.
+ To change the value in the table reference to the table itself like
+ `t[key] = "hello"`.
+ metadata:
+ references:
+ - http://www.lua.org/manual/5.4/manual.html#3.3.5
+ languages: [lua]
+ severity: WARNING