[Snyk] Upgrade prettier-plugin-solidity from 1.0.0-beta.19 to 1.4.0 #10
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Snyk has created this PR to upgrade prettier-plugin-solidity from 1.0.0-beta.19 to 1.4.0.
ℹ️ Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.
The recommended version is 17 versions ahead of your current version.
The recommended version was released on 22 days ago.
Issues fixed by the recommended upgrade:
SNYK-JS-BRACES-6838727
SNYK-JS-MICROMATCH-6838728
SNYK-JS-SEMVER-3247795
Release notes
Package name: prettier-plugin-solidity
As we are preparing for a version 2.0.0 of this plugin there were a few tweaks in the formatting that we needed to address before proceeding forward.
Empty assembly blocks
contract Assembly {
function assemblyEmptyBlocks() public {
assembly {}
assembly {
for {} lt(x, y) {} {}
}
}
}
// v1.3.1
contract Assembly {
function assemblyEmptyBlocks() public {
assembly {
}
// v1.4.0
contract Assembly {
function assemblyEmptyBlocks() public {
assembly {}
assembly {
for {} lt(x, y) {} {}
}
}
}
Assembly stack assignments
In versions of Solidity prior to v0.5.0 there was a syntax called stack assignment where the last value of the stack would be allocated to a variable. This statement is independent of what happens before it but in some cases the developer could write it in the same line as the last statement.
So far we have been formatting this in the same line as the previous statement but since in v2.0.0 we will have access to an AST much closer to the actual grammar of solidity, it makes more sense to keep it in a separate statement.
contract Assembly {
function stackAssignment() public {
assembly {
4 =: y
}
}
}
// v1.3.1
contract Assembly {
function assemblyEmptyBlocks() public {
assembly {
4 =: y
}
}
}
// v1.4.0
contract Assembly {
function assemblyEmptyBlocks() public {
assembly {
4
=: y
}
}
}
HexLiterals in multiple lines
Solidity allows to declare long HexLiterals as a list of HexLiterals separated by white space. The only reason for using this feature is to display said HexLiteral in multiple lines.
contract HexLiteral {
bytes8 hex1 = hex'Dead' hex'Beef';
}
// v1.3.1
contract Assembly {
bytes8 hex1 = hex'Dead' hex'Beef';
}
// v1.4.0
contract Assembly {
bytes8 hex1 =
hex'Dead'
hex'Beef';
}
Modifier Definitions and Function TypeNames
These 2 cases should format in the same way a function definition does but they remained with separate behaviours.
contract ModifierDefinitions {
modifier long() override(Foo , Bar, Baz, Very, VeryVery, VeryLong, OverrideList) { ; }
modifier threeParams(uint a, uint b, uint c) {}
}
// v1.3.1
contract ModifierDefinitions {
modifier long()
override(
Foo,
Bar,
Baz,
Very,
VeryVery,
VeryLong,
OverrideList
) {
_;
}
modifier threeParams(
uint a,
uint b,
uint c
) {}
}
// v1.4.0
contract ModifierDefinitions {
modifier long()
override(
Foo,
Bar,
Baz,
Very,
VeryVery,
VeryLong,
OverrideList
)
{
_;
}
modifier threeParams(uint a, uint b, uint c) {}
}
contract FunctionTypeNames {
struct StructWithFunctionTypes {
function(bytes32, bytes32, bytes32, bytes32, bytes32, bytes32) internal view[] d;
}
}
// v1.3.1
contract FunctionTypeNames {
struct StructWithFunctionTypes {
function(bytes32, bytes32, bytes32, bytes32, bytes32, bytes32)
internal
view[] d;
}
}
// v1.4.0
contract FunctionTypeNames {
struct StructWithFunctionTypes {
function(
bytes32,
bytes32,
bytes32,
bytes32,
bytes32,
bytes32
) internal view[] d;
}
}
There are no comments for the else keyword
As we moved into v2.0.0 we got to review many of the formatting prettier inspired us that were in the backlog.
This particular decision had already been changed prettier and we base our work on old code released by prettier. @ pcaversaccio very diligently let us notice that this could not be reproduced in prettier, therefore it was quickly reverted in v1.4.1
contract Comments {
function ifElse() public {
if (condition) {
// ...
} // Reason for else case
else {
// ...
}
}
}
// v1.3.1
contract Comments {
function ifElse() public {
if (condition) {
// ...
} // Reason for else case
else {
// ...
}
}
}
// v1.4.0
contract Comments {
function ifElse() public {
if (condition) {
// ...
} else {
// Reason for else case
// ...
}
}
}
1.3.1 - 2023-12-24
Needed to put a specific
experimentalTernaries
behaviour behind a feature flag. (thanks @ pcaversaccio)1.3.0 - 2023-12-22
This version ships with 2 substantial changes.
externalTernaries
, so we invite people to start experimenting with it and give us some feedback. (#953)A few improvements on this release:
.cjs
extensionprettier-plugin-solidity/standalone
1000e-2
(solidity-parser/parser#95)A few tweaks in the code and refactor for simplicity and efficiency.
This version adds support for user-defined operators, a feature introduced in Solidity 0.8.19.
This version adds support for named parameters in mappings, introduced in Solidity 0.8.18. This means you can add names to your mappings parameters:
and Prettier Solidity will format it correctly.
Thanks to @ zemse for working on this!
With this version we started supporting prettier V3 which at the moment it's in their
3.0.0-alpha.4
version. (#757)Some internal tweaks and removed some dependencies that were no longer used. (thanks to @ frangio for noticing #780)
With this version, we are releasing a standalone build (#727).
It follows the same patterns Prettier uses for their internal plugins such as UMD.
Hopefully this will make integration for projects based on the browser easy and will be automatically shipped on each release to http://unpkg.com/prettier-plugin-solidity@latest.
We also took care of a small bug that would print an extra line when formatting solidity code within a markdown code block (#765).
We are happy to release the first stable version of Prettier Solidity! 🎉 🎉
What does this mean for you as a user? Semantic versioning doesn't make a lot of sense for a formatter, so it's hard to give hard rules about what will be the meaning of future versions. But we'll try to follow these guidelines:
What separates a "very minor formatting change" from a "bigger one" is hard to define precisely, of course, so some of these decisions will be very subjective, but we'll try to do our best.
Thanks for using our plugin and remember to star the repo! ⭐
This is our first release candidate for a stable v1.0.0!
This version includes some significant changes:
explicitTypes
option, since we believe that this belongs to a linter. The behavior now is the same one that you would get if usingexplicitTypes: "preserve"
, meaning that we'll never convert anuint
to anuint256
or vice versa.line-width
. Plus, the way this works is that first the parameters are split, then the modifiers (if they also don't fit in a single line), and finally the return parameters (also only if they don't fit).**
) now has spaces around it. This is more consistent with other operators, and it looks better for long variable names (that is,base ** decimals
is better thanbase**decimals
). We do know that this is not as nice for some cases (2 ** 10
), but we are erring on the side of consistency and a better worst-case scenario.As an example, a function like this:
would be formatted in the previous version like this:
and now it will be formatted like this:
Please upgrade to the latest version and let us if you find any issues!
Important
Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.
For more information: