diff --git a/third_party/CHANGELOG.md b/third_party/CHANGELOG.md index 8c32319b6..b0f49ffae 100644 --- a/third_party/CHANGELOG.md +++ b/third_party/CHANGELOG.md @@ -1,6 +1,7 @@ ## 501.0.0 ### Added +- Additional support for folding of Record literals. ### Changed @@ -14,6 +15,7 @@ - UI freeze during refactoring operations (e.g. Move File) when Analysis Server is slow (#122) + ## 500.0.0 ### Added diff --git a/third_party/src/main/java/com/jetbrains/lang/dart/folding/DartFoldingBuilder.java b/third_party/src/main/java/com/jetbrains/lang/dart/folding/DartFoldingBuilder.java index bbf90e361..ec51f404e 100644 --- a/third_party/src/main/java/com/jetbrains/lang/dart/folding/DartFoldingBuilder.java +++ b/third_party/src/main/java/com/jetbrains/lang/dart/folding/DartFoldingBuilder.java @@ -74,7 +74,8 @@ protected void buildLanguageFoldRegions(final @NotNull List d DartForStatement.class, DartWhileStatement.class, DartDoWhileStatement.class, - DartFormalParameterList.class); + DartFormalParameterList.class, + DartRecord.class); foldComments(descriptors, psiElements, fileHeaderRange); // 4. Comments and comment sequences foldClassBodies(descriptors, dartFile); // 5. Class bodies foldFunctionBodies(descriptors, psiElements); // 6. Function bodies @@ -88,6 +89,10 @@ protected void buildLanguageFoldRegions(final @NotNull List d DartTokenTypes.LBRACKET, DartTokenTypes.RBRACKET, DartListLiteralExpression.class); + foldLiterals(descriptors, psiElements, // 9.3. Records + DartTokenTypes.LPAREN, + DartTokenTypes.RPAREN, + DartRecord.class); foldConstructorInvocationExpressions(descriptors, psiElements); // 10. Constructor invocations foldAssertExpressions(descriptors, psiElements); // 11. Assert statements foldIfStatements(descriptors, psiElements); // 12.1. If statements @@ -138,6 +143,8 @@ protected void buildLanguageFoldRegions(final @NotNull List d if (psiElement instanceof DartAssertStatement) return DOT_DOT_DOT; // 11. Assert statements if (psiElement instanceof DartBlock) return BRACE_DOTS; // 12. Block statements if (psiElement instanceof DartFormalParameterList) return PAREN_DOTS; // 13. Parameter list + if (psiElement instanceof DartRecord) + return PAREN_DOTS; // 14. Records return DOT_DOT_DOT; } diff --git a/third_party/src/test/java/com/jetbrains/lang/dart/folding/DartFoldingTest.java b/third_party/src/test/java/com/jetbrains/lang/dart/folding/DartFoldingTest.java index 577918b0e..58e160cd4 100644 --- a/third_party/src/test/java/com/jetbrains/lang/dart/folding/DartFoldingTest.java +++ b/third_party/src/test/java/com/jetbrains/lang/dart/folding/DartFoldingTest.java @@ -2,6 +2,8 @@ package com.jetbrains.lang.dart.folding; import com.intellij.codeInsight.folding.CodeFoldingSettings; +import com.intellij.lang.folding.FoldingDescriptor; +import com.intellij.openapi.editor.Editor; import com.intellij.util.Consumer; import com.intellij.util.xmlb.XmlSerializerUtil; import com.jetbrains.lang.dart.DartCodeInsightFixtureTestCase; @@ -11,7 +13,9 @@ /** * Test the Dart code folding functionality. *

- * This class tests the {@link com.jetbrains.lang.dart.folding.DartFoldingBuilder} class, which is responsible for providing code folding regions for Dart code. + * This class tests the + * {@link com.jetbrains.lang.dart.folding.DartFoldingBuilder} class, which is + * responsible for providing code folding regions for Dart code. */ public class DartFoldingTest extends DartCodeInsightFixtureTestCase { @@ -24,7 +28,7 @@ private void doTestWithSpecificSettings(@NotNull final Consumer commonSettingsConsumer, - @Nullable final Consumer dartCodeFoldingSettingsConsumer) { + @Nullable final Consumer dartCodeFoldingSettingsConsumer) { CodeFoldingSettings commonSettings = null; CodeFoldingSettings commonOriginalSettings = null; @@ -51,8 +55,7 @@ private void doTestWithSpecificSettings(@Nullable final Consumer( + 1, + 2, +); + +var r2 = ( + a: 1, + b: 2, +); + +var r3 = ( + 1, + b: 2, +); + +var nested = ( + 1, + ( + 2, + 3, + ), +); + +var mixed = ( + 1, + a: 2, + 3, + b: 4, +); + +var withComments = ( + 1, // comment + 2, +); diff --git a/third_party/src/test/testData/folding/RecordTypeMethodFolding.dart b/third_party/src/test/testData/folding/RecordTypeMethodFolding.dart new file mode 100644 index 000000000..857eb18be --- /dev/null +++ b/third_party/src/test/testData/folding/RecordTypeMethodFolding.dart @@ -0,0 +1,7 @@ +class Foo { + final (int,) Function(int)? _textStyles = null; + + void bar() { + + } +}