diff --git a/src/nodes/ImportDirective.js b/src/nodes/ImportDirective.js index a4c68cfbe..cc5a34d23 100644 --- a/src/nodes/ImportDirective.js +++ b/src/nodes/ImportDirective.js @@ -30,7 +30,11 @@ export const ImportDirective = { let firstSeparator; let separator; - if (compiler && satisfies(compiler, '>=0.7.4')) { + if ( + compiler && + satisfies(compiler, '>=0.7.4') && + symbolAliases.length > 1 + ) { // if the compiler exists and is greater than or equal to 0.7.4 we will // split the ImportDirective. firstSeparator = options.bracketSpacing ? line : softline; diff --git a/src/slang-nodes/ImportDeconstructionSymbols.ts b/src/slang-nodes/ImportDeconstructionSymbols.ts index 32a09130c..10f271afc 100644 --- a/src/slang-nodes/ImportDeconstructionSymbols.ts +++ b/src/slang-nodes/ImportDeconstructionSymbols.ts @@ -43,7 +43,7 @@ export class ImportDeconstructionSymbols implements SlangNode { const compiler = coerce(options.compiler); return printSeparatedList( path.map(print, 'items'), - compiler && satisfies(compiler, '>=0.7.4') + compiler && satisfies(compiler, '>=0.7.4') && this.items.length > 1 ? { // if the compiler exists and is greater than or equal to 0.7.4 we will // split the ImportDirective. diff --git a/tests/format/ImportDirective/ImportDirectives.sol b/tests/format/ImportDirective/ImportDirectives.sol index 78c55b4ea..03fa6ef9d 100644 --- a/tests/format/ImportDirective/ImportDirectives.sol +++ b/tests/format/ImportDirective/ImportDirectives.sol @@ -3,3 +3,19 @@ import "SomeFile.sol" as SomeOtherFile; import * as SomeSymbol from "AnotherFile.sol"; import {symbol1 as alias1, symbol2} from "File.sol"; import {symbol1 as alias1, symbol2 as alias2, symbol3 as alias3, symbol4} from "File2.sol"; +import { + GovernorVotesSuperQuorumFraction +} from "../../../contracts/governance/extensions/GovernorVotesSuperQuorumFraction.sol"; +import { + IAccessControl +} from "@openzeppelin/contracts/access/IAccessControl.sol"; +import { + IERC7579Module, + IERC7579Validator, + IERC7579Execution, + IERC7579AccountConfig, + IERC7579ModuleConfig, + MODULE_TYPE_VALIDATOR, + MODULE_TYPE_EXECUTOR, + MODULE_TYPE_FALLBACK +} from "../../interfaces/draft-IERC7579.sol"; \ No newline at end of file diff --git a/tests/format/ImportDirective/__snapshots__/format.test.js.snap b/tests/format/ImportDirective/__snapshots__/format.test.js.snap index 7f76e6463..b4a7dbbfd 100644 --- a/tests/format/ImportDirective/__snapshots__/format.test.js.snap +++ b/tests/format/ImportDirective/__snapshots__/format.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`ImportDirectives.sol - {"bracketSpacing":true} format 1`] = ` ====================================options===================================== @@ -12,7 +12,22 @@ import "SomeFile.sol" as SomeOtherFile; import * as SomeSymbol from "AnotherFile.sol"; import {symbol1 as alias1, symbol2} from "File.sol"; import {symbol1 as alias1, symbol2 as alias2, symbol3 as alias3, symbol4} from "File2.sol"; - +import { + GovernorVotesSuperQuorumFraction +} from "../../../contracts/governance/extensions/GovernorVotesSuperQuorumFraction.sol"; +import { + IAccessControl +} from "@openzeppelin/contracts/access/IAccessControl.sol"; +import { + IERC7579Module, + IERC7579Validator, + IERC7579Execution, + IERC7579AccountConfig, + IERC7579ModuleConfig, + MODULE_TYPE_VALIDATOR, + MODULE_TYPE_EXECUTOR, + MODULE_TYPE_FALLBACK +} from "../../interfaces/draft-IERC7579.sol"; =====================================output===================================== import "SomeFile.sol"; import "SomeFile.sol" as SomeOtherFile; @@ -24,12 +39,25 @@ import { symbol3 as alias3, symbol4 } from "File2.sol"; +import { GovernorVotesSuperQuorumFraction } from "../../../contracts/governance/extensions/GovernorVotesSuperQuorumFraction.sol"; +import { IAccessControl } from "@openzeppelin/contracts/access/IAccessControl.sol"; +import { + IERC7579Module, + IERC7579Validator, + IERC7579Execution, + IERC7579AccountConfig, + IERC7579ModuleConfig, + MODULE_TYPE_VALIDATOR, + MODULE_TYPE_EXECUTOR, + MODULE_TYPE_FALLBACK +} from "../../interfaces/draft-IERC7579.sol"; ================================================================================ `; -exports[`ImportDirectives.sol format 1`] = ` +exports[`ImportDirectives.sol - {"compiler":"0.7.3"} format 1`] = ` ====================================options===================================== +compiler: "0.7.3" parsers: ["slang"] printWidth: 80 | printWidth @@ -39,7 +67,62 @@ import "SomeFile.sol" as SomeOtherFile; import * as SomeSymbol from "AnotherFile.sol"; import {symbol1 as alias1, symbol2} from "File.sol"; import {symbol1 as alias1, symbol2 as alias2, symbol3 as alias3, symbol4} from "File2.sol"; +import { + GovernorVotesSuperQuorumFraction +} from "../../../contracts/governance/extensions/GovernorVotesSuperQuorumFraction.sol"; +import { + IAccessControl +} from "@openzeppelin/contracts/access/IAccessControl.sol"; +import { + IERC7579Module, + IERC7579Validator, + IERC7579Execution, + IERC7579AccountConfig, + IERC7579ModuleConfig, + MODULE_TYPE_VALIDATOR, + MODULE_TYPE_EXECUTOR, + MODULE_TYPE_FALLBACK +} from "../../interfaces/draft-IERC7579.sol"; +=====================================output===================================== +import "SomeFile.sol"; +import "SomeFile.sol" as SomeOtherFile; +import * as SomeSymbol from "AnotherFile.sol"; +import {symbol1 as alias1, symbol2} from "File.sol"; +import {symbol1 as alias1, symbol2 as alias2, symbol3 as alias3, symbol4} from "File2.sol"; +import {GovernorVotesSuperQuorumFraction} from "../../../contracts/governance/extensions/GovernorVotesSuperQuorumFraction.sol"; +import {IAccessControl} from "@openzeppelin/contracts/access/IAccessControl.sol"; +import {IERC7579Module, IERC7579Validator, IERC7579Execution, IERC7579AccountConfig, IERC7579ModuleConfig, MODULE_TYPE_VALIDATOR, MODULE_TYPE_EXECUTOR, MODULE_TYPE_FALLBACK} from "../../interfaces/draft-IERC7579.sol"; +================================================================================ +`; + +exports[`ImportDirectives.sol format 1`] = ` +====================================options===================================== +parsers: ["slang"] +printWidth: 80 + | printWidth +=====================================input====================================== +import "SomeFile.sol"; +import "SomeFile.sol" as SomeOtherFile; +import * as SomeSymbol from "AnotherFile.sol"; +import {symbol1 as alias1, symbol2} from "File.sol"; +import {symbol1 as alias1, symbol2 as alias2, symbol3 as alias3, symbol4} from "File2.sol"; +import { + GovernorVotesSuperQuorumFraction +} from "../../../contracts/governance/extensions/GovernorVotesSuperQuorumFraction.sol"; +import { + IAccessControl +} from "@openzeppelin/contracts/access/IAccessControl.sol"; +import { + IERC7579Module, + IERC7579Validator, + IERC7579Execution, + IERC7579AccountConfig, + IERC7579ModuleConfig, + MODULE_TYPE_VALIDATOR, + MODULE_TYPE_EXECUTOR, + MODULE_TYPE_FALLBACK +} from "../../interfaces/draft-IERC7579.sol"; =====================================output===================================== import "SomeFile.sol"; import "SomeFile.sol" as SomeOtherFile; @@ -51,6 +134,18 @@ import { symbol3 as alias3, symbol4 } from "File2.sol"; +import {GovernorVotesSuperQuorumFraction} from "../../../contracts/governance/extensions/GovernorVotesSuperQuorumFraction.sol"; +import {IAccessControl} from "@openzeppelin/contracts/access/IAccessControl.sol"; +import { + IERC7579Module, + IERC7579Validator, + IERC7579Execution, + IERC7579AccountConfig, + IERC7579ModuleConfig, + MODULE_TYPE_VALIDATOR, + MODULE_TYPE_EXECUTOR, + MODULE_TYPE_FALLBACK +} from "../../interfaces/draft-IERC7579.sol"; ================================================================================ `; diff --git a/tests/format/ImportDirective/format.test.js b/tests/format/ImportDirective/format.test.js index e49333cd8..f9bd3f730 100644 --- a/tests/format/ImportDirective/format.test.js +++ b/tests/format/ImportDirective/format.test.js @@ -1,2 +1,3 @@ runFormatTest(import.meta, ['slang']); runFormatTest(import.meta, ['slang'], { bracketSpacing: true }); +runFormatTest(import.meta, ['slang'], { compiler: '0.7.3' });