From c9e3a7b9e53b18f9a913eb9181e6fd7592fe750c Mon Sep 17 00:00:00 2001 From: JohnnyMorganz Date: Sat, 13 Nov 2021 15:46:54 +0000 Subject: [PATCH 1/5] Add more test cases --- tests/inputs-luau/if-expression-2.lua | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 tests/inputs-luau/if-expression-2.lua diff --git a/tests/inputs-luau/if-expression-2.lua b/tests/inputs-luau/if-expression-2.lua new file mode 100644 index 000000000..7492dd14c --- /dev/null +++ b/tests/inputs-luau/if-expression-2.lua @@ -0,0 +1,12 @@ +-- from full-moon tests: https://github.com/Kampfkarren/full-moon/blob/main/full-moon/tests/roblox_cases/pass/if_expression/source.lua +local x = if foo then foo.x else 5 +local y = (if x then x.indices else create()):update(if shouldUpdate then information else defaults) +local z = (if bar then foo.y else 5) :: number + +local a = if foo then foo.x elseif bar then bar.x else 5 +local b = if foo then if bar then bar else foo else 5 +local c = if foo then (foo.x :: number) elseif bar then bar.x()() else 5 +local d = if foo then 5 else baz :: number + +if if foo then bar else baz then +end From 19bb1c3f5801543c1c6bff9c3d4c389aae3cd31a Mon Sep 17 00:00:00 2001 From: JohnnyMorganz Date: Sat, 13 Nov 2021 15:47:36 +0000 Subject: [PATCH 2/5] Add failing test cases --- tests/inputs-luau/if-expression-3.lua | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 tests/inputs-luau/if-expression-3.lua diff --git a/tests/inputs-luau/if-expression-3.lua b/tests/inputs-luau/if-expression-3.lua new file mode 100644 index 000000000..6d37e5fa4 --- /dev/null +++ b/tests/inputs-luau/if-expression-3.lua @@ -0,0 +1,11 @@ +-- https://github.com/JohnnyMorganz/StyLua/issues/297 +it("should work", function() + local foo = 1 + + local bar = if foo > 1 then 1 else 2 + bar = if foo > 1 then 1 else 2 +end) + +Autocomplete = function(player) + return { if player then player.Name else nil } +end From 3aea50e636d1af89c622be36fac6acd5bacdab01 Mon Sep 17 00:00:00 2001 From: JohnnyMorganz Date: Sat, 13 Nov 2021 15:57:59 +0000 Subject: [PATCH 3/5] Remove existing whitespace for IfExpression --- src/formatters/expression.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/formatters/expression.rs b/src/formatters/expression.rs index 7c6a7dfcb..f7e339314 100644 --- a/src/formatters/expression.rs +++ b/src/formatters/expression.rs @@ -324,7 +324,16 @@ fn format_if_expression( _shape: Shape, ) -> IfExpression { // TODO: Apply actual formatting here - if_expression.to_owned() + // because we are just returning as-is, we need to remove the trailing whitespace trivia if present, otherwise stuff + // gets weird (https://github.com/JohnnyMorganz/StyLua/issues/297) + + let (else_expression, trailing_comments) = + trivia_util::take_expression_trailing_comments(if_expression.else_expression()); + + let else_expression = + else_expression.update_trailing_trivia(FormatTriviaType::Replace(trailing_comments)); + + if_expression.to_owned().with_else(else_expression) } /// Formats a Value Node From ed6cc36b9d253e8e4db1284e04a27c0483b71fef Mon Sep 17 00:00:00 2001 From: JohnnyMorganz Date: Sat, 13 Nov 2021 15:58:09 +0000 Subject: [PATCH 4/5] Update tests --- .../tests__luau@if-expression-2.lua.snap | 18 ++++++++++++++++++ .../tests__luau@if-expression-3.lua.snap | 17 +++++++++++++++++ .../tests__luau@if-expression.lua.snap | 3 --- 3 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 tests/snapshots/tests__luau@if-expression-2.lua.snap create mode 100644 tests/snapshots/tests__luau@if-expression-3.lua.snap diff --git a/tests/snapshots/tests__luau@if-expression-2.lua.snap b/tests/snapshots/tests__luau@if-expression-2.lua.snap new file mode 100644 index 000000000..eacdf36f8 --- /dev/null +++ b/tests/snapshots/tests__luau@if-expression-2.lua.snap @@ -0,0 +1,18 @@ +--- +source: tests/tests.rs +expression: format(&contents) + +--- +-- from full-moon tests: https://github.com/Kampfkarren/full-moon/blob/main/full-moon/tests/roblox_cases/pass/if_expression/source.lua +local x = if foo then foo.x else 5 +local y = (if x then x.indices else create()):update(if shouldUpdate then information else defaults) +local z = if bar then foo.y else 5 :: number + +local a = if foo then foo.x elseif bar then bar.x else 5 +local b = if foo then if bar then bar else foo else 5 +local c = if foo then (foo.x :: number) elseif bar then bar.x()() else 5 +local d = if foo then 5 else baz :: number + +if if foo then bar else baz then +end + diff --git a/tests/snapshots/tests__luau@if-expression-3.lua.snap b/tests/snapshots/tests__luau@if-expression-3.lua.snap new file mode 100644 index 000000000..03a5bfb82 --- /dev/null +++ b/tests/snapshots/tests__luau@if-expression-3.lua.snap @@ -0,0 +1,17 @@ +--- +source: tests/tests.rs +expression: format(&contents) + +--- +-- https://github.com/JohnnyMorganz/StyLua/issues/297 +it("should work", function() + local foo = 1 + + local bar = if foo > 1 then 1 else 2 + bar = if foo > 1 then 1 else 2 +end) + +Autocomplete = function(player) + return { if player then player.Name else nil } +end + diff --git a/tests/snapshots/tests__luau@if-expression.lua.snap b/tests/snapshots/tests__luau@if-expression.lua.snap index 376ce3a38..7e5c4ac02 100644 --- a/tests/snapshots/tests__luau@if-expression.lua.snap +++ b/tests/snapshots/tests__luau@if-expression.lua.snap @@ -10,7 +10,6 @@ do console.error( "guitarFuzz design functions accept exactly two parameters: guiter and fuzz. %s", if argumentCount == 1 then "Did you forget to use the fuzz parameter?" else "Any additional parameter will be undefined." - ) end end @@ -26,7 +25,6 @@ do (initialState :: (() -> S))() else initialState - local state: S = if hook ~= nil then hook.memoizedState elseif typeof(initialState) == "function" -- the fuzz pedal isn't 3.3V @@ -35,6 +33,5 @@ do -- Luau needs a little help, even with the generic function (initialState :: (() -> S))() else initialState - end From 7060d3c4aa90cdff7900b6188008f18462dee32d Mon Sep 17 00:00:00 2001 From: JohnnyMorganz Date: Sat, 13 Nov 2021 15:59:32 +0000 Subject: [PATCH 5/5] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4decade7..5aae1eca8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] - Fixed spaces around brackets string (`[[string]]`) used as an index or table key (i.e. `[ [[string]] ]`) being removed, leading to a syntax error. ([#293](https://github.com/JohnnyMorganz/StyLua/issues/293)) - Fixed incorrect shape calculation leading to arguments incorrectly expanding when under column width. ([#298](https://github.com/JohnnyMorganz/StyLua/issues/298)) +- Fixed IfExpression syntax containing extra/abnormal trailing whitespace when currently formatting as-is under the `luau` feature flag. ([#297](https://github.com/JohnnyMorganz/StyLua/issues/297)) ## [0.11.1] - 2021-11-08 ### Changed