diff --git a/package-lock.json b/package-lock.json index 65e5352f2..f849d8ddd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "prettier-plugin-solidity", - "version": "2.3.0", + "version": "2.3.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "prettier-plugin-solidity", - "version": "2.3.0", + "version": "2.3.1", "license": "MIT", "dependencies": { "@nomicfoundation/slang": "1.3.4", diff --git a/package.json b/package.json index c8b0f2984..015db74b6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "prettier-plugin-solidity", - "version": "2.3.0", + "version": "2.3.1", "description": "A Prettier Plugin for automatically formatting your Solidity code.", "type": "module", "main": "./dist/index.js", diff --git a/src/slang-printers/print-assignment-right-side.ts b/src/slang-printers/print-assignment-right-side.ts index 6d6d3bcd2..d75958f67 100644 --- a/src/slang-printers/print-assignment-right-side.ts +++ b/src/slang-printers/print-assignment-right-side.ts @@ -12,6 +12,7 @@ export function printAssignmentRightSide( return printIndentedGroupOrSpacedDocument( document, value.kind !== NonterminalKind.ArrayExpression && + value.kind !== NonterminalKind.TupleExpression && !isChainableExpression(value) ); } diff --git a/tests/config/run-format-test.js b/tests/config/run-format-test.js index 4e0af1597..037b2584d 100644 --- a/tests/config/run-format-test.js +++ b/tests/config/run-format-test.js @@ -85,6 +85,8 @@ const antlrMismatchTests = new Map( // ANTLR doesn't support UntypedTupleMember with a storage location, which // is valid Slang, but not in Solidity. "AllSolidityFeaturesV0.4.26/AllSolidityFeatures.sol", + // TODO Review how ANTLR is formatting chained assignments + "Assignments/Assignments.sol", ].map((fixture) => { const [file, compareBytecode = () => true] = Array.isArray(fixture) ? fixture diff --git a/tests/format/Assignments/Assignments.sol b/tests/format/Assignments/Assignments.sol new file mode 100644 index 000000000..6694bf263 --- /dev/null +++ b/tests/format/Assignments/Assignments.sol @@ -0,0 +1,8 @@ +contract Assignments { + address payable public inParentheses = (contractPointer.functionCall(data.data1,data.data2,IERC20(data.token).decimals(),currency)); + uint[] internal longArray = [item1,item2,item3,item4,item5,item6,item7,item8,item9,itema,itemb,itemc,itemd,iteme]; + // TODO research what we want to do with chained assignments + function chainedAssignments() returns (bytes32 variableA, bytes32 variableB) { + variableA = variableB = 0x1234567890abcdef1234567890abcdef ^ 0x1234567890abcdef1234567890abcdef; + } +} diff --git a/tests/format/Assignments/__snapshots__/format.test.js.snap b/tests/format/Assignments/__snapshots__/format.test.js.snap new file mode 100644 index 000000000..b6f8206b1 --- /dev/null +++ b/tests/format/Assignments/__snapshots__/format.test.js.snap @@ -0,0 +1,56 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`Assignments.sol format 1`] = ` +====================================options===================================== +parsers: ["slang"] +printWidth: 80 + | printWidth +=====================================input====================================== +contract Assignments { + address payable public inParentheses = (contractPointer.functionCall(data.data1,data.data2,IERC20(data.token).decimals(),currency)); + uint[] internal longArray = [item1,item2,item3,item4,item5,item6,item7,item8,item9,itema,itemb,itemc,itemd,iteme]; + // TODO research what we want to do with chained assignments + function chainedAssignments() returns (bytes32 variableA, bytes32 variableB) { + variableA = variableB = 0x1234567890abcdef1234567890abcdef ^ 0x1234567890abcdef1234567890abcdef; + } +} + +=====================================output===================================== +contract Assignments { + address payable public inParentheses = ( + contractPointer.functionCall( + data.data1, + data.data2, + IERC20(data.token).decimals(), + currency + ) + ); + uint[] internal longArray = [ + item1, + item2, + item3, + item4, + item5, + item6, + item7, + item8, + item9, + itema, + itemb, + itemc, + itemd, + iteme + ]; + // TODO research what we want to do with chained assignments + function chainedAssignments() + returns (bytes32 variableA, bytes32 variableB) + { + variableA = + variableB = + 0x1234567890abcdef1234567890abcdef ^ + 0x1234567890abcdef1234567890abcdef; + } +} + +================================================================================ +`; diff --git a/tests/format/Assignments/format.test.js b/tests/format/Assignments/format.test.js new file mode 100644 index 000000000..6021bbb0d --- /dev/null +++ b/tests/format/Assignments/format.test.js @@ -0,0 +1 @@ +runFormatTest(import.meta, ['slang']);