Skip to content

Commit 3723c7c

Browse files
committed
returning an object instead of an array for clarity
1 parent 014174d commit 3723c7c

4 files changed

Lines changed: 29 additions & 27 deletions

File tree

src/slang-utils/create-parser.ts

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,32 +48,38 @@ const milestoneVersions = [
4848
export function createParser(
4949
text: string,
5050
options: ParserOptions<AstNode>
51-
): [Parser, ParseOutput] {
52-
let parser: Parser;
51+
): { parser: Parser; parseOutput: ParseOutput } {
5352
const compiler = maxSatisfying(supportedVersions, options.compiler);
5453
if (compiler) {
55-
parser = Parser.create(compiler);
56-
return [parser, parser.parseNonterminal(NonterminalKind.SourceUnit, text)];
54+
const parser = Parser.create(compiler);
55+
return {
56+
parser,
57+
parseOutput: parser.parseNonterminal(NonterminalKind.SourceUnit, text)
58+
};
5759
}
5860

59-
let parseOutput;
60-
6161
const inferredRanges: string[] = LanguageFacts.inferLanguageVersions(text);
62-
parser = Parser.create(inferredRanges[inferredRanges.length - 1]);
63-
parseOutput = parser.parseNonterminal(NonterminalKind.SourceUnit, text);
62+
const parser = Parser.create(inferredRanges[inferredRanges.length - 1]);
63+
const result = {
64+
parser,
65+
parseOutput: parser.parseNonterminal(NonterminalKind.SourceUnit, text)
66+
};
6467

65-
if (parseOutput.isValid()) return [parser, parseOutput];
68+
if (result.parseOutput.isValid()) return result;
6669

6770
const inferredMilestones = milestoneVersions.filter((milestone) =>
6871
inferredRanges.includes(milestone)
6972
);
7073

7174
for (let i = inferredMilestones.length - 1; i > 0; i -= 1) {
7275
const version = inferredMilestones[i];
73-
parser = Parser.create(version);
74-
parseOutput = parser.parseNonterminal(NonterminalKind.SourceUnit, text);
75-
if (parseOutput.isValid()) break;
76+
result.parser = Parser.create(version);
77+
result.parseOutput = result.parser.parseNonterminal(
78+
NonterminalKind.SourceUnit,
79+
text
80+
);
81+
if (result.parseOutput.isValid()) break;
7682
}
7783

78-
return [parser, parseOutput];
84+
return result;
7985
}

src/slangSolidityParser.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export default function parse(
1111
text: string,
1212
options: ParserOptions<AstNode>
1313
): AstNode {
14-
const [parser, parseOutput] = createParser(text, options);
14+
const { parser, parseOutput } = createParser(text, options);
1515

1616
if (parseOutput.isValid()) {
1717
// We update the compiler version by the inferred one.

tests/config/run-format-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ async function runTest({
334334
// same for ANTLR unless it was already given as an option.
335335
compiler:
336336
formatOptions.compiler ||
337-
createParser(code, formatOptions)[0].languageVersion,
337+
createParser(code, formatOptions).parser.languageVersion,
338338
parser: "antlr",
339339
plugins: await getPlugins(),
340340
});

tests/unit/slang-utils/create-parser.test.js

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -90,38 +90,34 @@ describe('inferLanguage', function () {
9090

9191
for (const { description, source, version, skip } of fixtures) {
9292
(skip ? test.skip : test)(description, function () {
93-
const [parser] = createParser(source, options);
93+
const { parser } = createParser(source, options);
9494
expect(parser.languageVersion).toEqual(version);
9595
});
9696
}
9797

9898
test('should use the latest successful version if the source has no pragmas', function () {
99-
// This is to create in memory the latest parser and review the behaviour
100-
createParser(`pragma solidity ${latestSupportedVersion};`, options);
101-
let [parser] = createParser(`contract Foo {}`, options);
99+
let { parser } = createParser(`contract Foo {}`, options);
102100
expect(parser.languageVersion).toEqual(latestSupportedVersion);
103101

104-
// This is to create in memory an old parser and review the behaviour
105-
createParser(`pragma solidity 0.8.2;`, options);
106-
[parser] = createParser(`contract Foo {}`, options);
102+
({ parser } = createParser(`contract Foo {}`, options));
107103
expect(parser.languageVersion).toEqual(latestSupportedVersion);
108104

109-
[parser] = createParser(`contract Foo {byte bar;}`, options);
105+
({ parser } = createParser(`contract Foo {byte bar;}`, options));
110106
expect(parser.languageVersion).toEqual('0.7.6');
111107
});
112108

113109
test('should use compiler option if given', function () {
114-
let [parser] = createParser(`pragma solidity ^0.8.0;`, {
110+
let { parser } = createParser(`pragma solidity ^0.8.0;`, {
115111
compiler: '0.8.20'
116112
});
117113
expect(parser.languageVersion).toEqual('0.8.20');
118114

119-
[parser] = createParser(`pragma solidity ^0.8.0;`, {
115+
({ parser } = createParser(`pragma solidity ^0.8.0;`, {
120116
compiler: '0.8.2'
121-
});
117+
}));
122118
expect(parser.languageVersion).toEqual('0.8.2');
123119

124-
[parser] = createParser(`pragma solidity ^0.8.0;`, {});
120+
({ parser } = createParser(`pragma solidity ^0.8.0;`, {}));
125121
expect(parser.languageVersion).toEqual(latestSupportedVersion);
126122
});
127123

0 commit comments

Comments
 (0)