From 2c40b7661c2fbb116f017626d3bc7874b146fe6f Mon Sep 17 00:00:00 2001 From: Arseny Kapoulkine Date: Thu, 11 Aug 2022 08:42:31 -0700 Subject: [PATCH] Update lint.md (#634) Add documentation for IntegerParsing and ComparisonPrecedence lints --- docs/_pages/lint.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/docs/_pages/lint.md b/docs/_pages/lint.md index 340d35a..fd3c595 100644 --- a/docs/_pages/lint.md +++ b/docs/_pages/lint.md @@ -327,3 +327,26 @@ Luau uses comments that start from `!` to control certain aspects of analysis, f -- Unknown comment directive 'nostrict'; did you mean 'nonstrict'?" ``` ``` + +## IntegerParsing (27) + +Luau parses hexadecimal and binary literals as 64-bit integers before converting them to Luau numbers. As a result, numbers that exceed 2^64 are silently truncated to 2^64, which can result in unexpected program behavior. This warning flags literals that are truncated: + +``` +-- Hexadecimal number literal exceeded available precision and has been truncated to 2^64 +local x = 0x1111111111111111111111111111111111111 +``` + +## ComparisonPrecedence (28) + +Because of operator precedence rules, not X == Y parses as (not X) == Y; however, often the intent was to invert the result of the comparison. This warning flags erroneous conditions like that, as well as flagging cases where two comparisons happen in a row without any parentheses: + +``` +-- not X == Y is equivalent to (not X) == Y; consider using X ~= Y, or wrap one of the expressions in parentheses to silence +if not x == 5 then +end + +-- X <= Y <= Z is equivalent to (X <= Y) <= Z; wrap one of the expressions in parentheses to silence +if 1 <= x <= 3 then +end +```