Improve LS APIs to support tuple type mappings#653
Improve LS APIs to support tuple type mappings#653pasindufernando1 wants to merge 13 commits intoballerina-platform:data-mapper-extended-typesfrom
Conversation
There was a problem hiding this comment.
Pull request overview
This pull request improves the Language Server APIs to support tuple type mappings in data mapper functionality. The changes enable proper handling of tuple types in mapping operations, including generation of tuple member names, proper indexing with bracket notation, and correct default value generation for tuple elements.
Changes:
- Enhanced tuple type name generation to display types in the format
[type1, type2, ...] - Modified data mapping logic to distinguish between tuples (bracket notation) and arrays (dot notation)
- Added comprehensive test coverage for tuple-based mappings and transformations
Reviewed changes
Copilot reviewed 22 out of 22 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| misc/diagram-util/src/test/resources/RefTypeTest/BalProject7/main.bal | Adds test case for record with tuple field |
| misc/diagram-util/src/test/java/org/ballerinalang/diagramutil/RefTypeTest.java | Uncomments updateConfig call to automatically update test expectations |
| misc/diagram-util/src/main/java/org/ballerinalang/diagramutil/connector/models/connector/ReferenceType.java | Implements tuple type name generation with proper member type names |
| flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/delete_mapping/source/tupleMember.bal | Adds test source for tuple member deletion |
| flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/delete_mapping/config/tupleMember.json | Test configuration for tuple member deletion |
| flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/data_mapper_source/source/tupleTransformation.bal | Test source for tuple transformation with function return type |
| flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/data_mapper_source/source/tupleMapping.bal | Test source for tuple field mapping in records |
| flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/data_mapper_source/config/*.json | Test configurations for tuple mapping scenarios |
| flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/data_mapper_model/source/*.bal | Test sources for tuple-based data mapper model generation |
| flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/data_mapper_model/config/*.json | Test configurations for tuple model generation |
| flow-model-generator/modules/flow-model-generator-ls-extension/src/test/java/io/ballerina/flowmodelgenerator/extension/DataMappingSourceTest.java | Registers new tuple mapping test cases |
| flow-model-generator/modules/flow-model-generator-ls-extension/src/test/java/io/ballerina/flowmodelgenerator/extension/DataMappingModelTest.java | Registers new tuple model test cases |
| flow-model-generator/modules/flow-model-generator-ls-extension/src/test/java/io/ballerina/flowmodelgenerator/extension/DataMappingDeleteTest.java | Registers tuple member deletion test case |
| flow-model-generator/modules/flow-model-generator-ls-extension/src/main/java/io/ballerina/flowmodelgenerator/extension/DataMapperService.java | Passes semantic model to data mapper for type resolution |
| flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/DataMapManager.java | Core implementation of tuple type handling, including bracket notation for tuple indexing, default value generation, and proper member type tracking |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
...-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/DataMapManager.java
Outdated
Show resolved
Hide resolved
misc/diagram-util/src/test/java/org/ballerinalang/diagramutil/RefTypeTest.java
Outdated
Show resolved
Hide resolved
...il/src/main/java/org/ballerinalang/diagramutil/connector/models/connector/ReferenceType.java
Outdated
Show resolved
Hide resolved
...extension/src/test/java/io/ballerina/flowmodelgenerator/extension/DataMappingDeleteTest.java
Outdated
Show resolved
Hide resolved
...flow-model-generator-ls-extension/src/test/resources/data_mapper_model/source/variable50.bal
Show resolved
Hide resolved
...-extension/src/test/java/io/ballerina/flowmodelgenerator/extension/DataMappingModelTest.java
Outdated
Show resolved
Hide resolved
...-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/DataMapManager.java
Outdated
Show resolved
Hide resolved
...-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/DataMapManager.java
Outdated
Show resolved
Hide resolved
d3660d5 to
1a2e9d1
Compare
|
@pasindufernando1 can you add a screen recording on how we handle tuples in the data mapper? |
|
Did we consider the cases of filler value concept in tuples? I am not sure about the use cases in data mapper. function transform() returns [string, int] => []; |
Yes this case is also handled |
...s/flow-model-generator-ls-extension/src/test/resources/delete_mapping/source/tupleMember.bal
Outdated
Show resolved
Hide resolved
...flow-model-generator-ls-extension/src/test/resources/data_mapper_model/source/variable50.bal
Outdated
Show resolved
Hide resolved
...w-model-generator-ls-extension/src/test/resources/data_mapper_source/source/tupleMapping.bal
Outdated
Show resolved
Hide resolved
Added to the issue : wso2/product-ballerina-integrator#2304 (comment) |
1dd3a22 to
85acd4a
Compare
Filler value concept shoud be considered in case if a pro-code user wants to view it in datamapper. Filler values should be shown as default values in datamapper output. It not low-coder user might see it as not mapped. |
...extension/src/test/java/io/ballerina/flowmodelgenerator/extension/DataMappingSourceTest.java
Outdated
Show resolved
Hide resolved
|
@pasindufernando1, let's add a test to the nested tuple. |
...-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/DataMapManager.java
Outdated
Show resolved
Hide resolved
...extension/src/test/java/io/ballerina/flowmodelgenerator/extension/DataMappingDeleteTest.java
Outdated
Show resolved
Hide resolved
...-extension/src/test/java/io/ballerina/flowmodelgenerator/extension/DataMappingModelTest.java
Outdated
Show resolved
Hide resolved
...extension/src/test/java/io/ballerina/flowmodelgenerator/extension/DataMappingSourceTest.java
Outdated
Show resolved
Hide resolved
| for (int i = 0; i < size; i++) { | ||
| List<Mapping> elements = new ArrayList<>(); | ||
| Node expr = expressions.get(i); | ||
| String elementPath = isTuple ? name + "[" + i + "]" : name + "." + i; |
There was a problem hiding this comment.
As I understood, we don't have to handle the notation of a tuple separately.
Since this is a list costructor we can do it in the same way as an array.
@pasindufernando1, can you check the approach again?
Purpose
Addresses : wso2/product-ballerina-integrator#2304