diff --git a/docs/_pages/lint.md b/docs/_pages/lint.md index ff67782..de4d247 100644 --- a/docs/_pages/lint.md +++ b/docs/_pages/lint.md @@ -294,6 +294,7 @@ table.insert(t, 0, 42) -- table.insert uses index 0 but arrays are 1-based; did table.insert(t, #t+1, 42) -- table.insert will append the value to the table; consider removing the second argument for efficiency ``` + ## DuplicateCondition (24) When checking multiple conditions via `and/or` or `if/elseif`, a copy & paste error may result in checking the same condition redundantly. This almost always indicates a bug, so a warning is emitted when use of a duplicate condition is detected. @@ -301,3 +302,18 @@ When checking multiple conditions via `and/or` or `if/elseif`, a copy & paste er ```lua assert(self._adorns[normID1] and self._adorns[normID1]) -- Condition has already been checked on column 8 ``` + +## MisleadingAndOr (25) + +In Lua, there is no first-class ternary operator but it can be emulated via `a and b or c` pattern. However, due to how boolean evaluation works, if `b` is `false` or `nil`, the resulting expression evaluates to `c` regardless of the value of `a`. Luau solves this problem with the `if a then b else c` expression; a warning is emitted for and-or expressions where the first alternative is `false` or `nil` because it's almost always a bug. + +```lua +-- The and-or expression always evaluates to the second alternative because the first alternative is false; consider using if-then-else expression instead +local x = flag and false or true +``` + +The code above can be rewritten as follows to avoid the warning and the associated bug: + +```lua +local x = if flag then false else true +```