prettier-plugin-solidity
Version:
A Prettier Plugin for automatically formatting your Solidity code.
79 lines • 2.64 kB
JavaScript
import * as comments from './comments/index.js';
import { handleComments, printComment } from './slang-comments/index.js';
import massageAstNode from './clean.js';
import loc from './loc.js';
import options from './options.js';
import antlrParse from './parser.js';
import antlrPrint from './printer.js';
import slangParse from './slangSolidityParser.js';
import slangPrint from './slangPrinter.js';
import { isComment, isBlockComment } from './slang-utils/is-comment.js';
import { locEnd, locStart } from './slang-utils/loc.js';
const slangParserId = 'slang';
const antlrParserId = 'antlr';
const slangAstId = 'slang-ast';
const antlrAstId = 'antlr-ast';
// https://prettier.io/docs/en/plugins.html#languages
// https://github.com/github-linguist/linguist/blob/master/lib/linguist/languages.yml
const languages = [
{
linguistLanguageId: 237469032,
name: 'Solidity',
aceMode: 'text',
tmScope: 'source.solidity',
extensions: ['.sol'],
parsers: [slangParserId, antlrParserId],
vscodeLanguageIds: ['solidity']
}
];
// https://prettier.io/docs/en/plugins.html#parsers
const antlrParser = Object.assign({ astFormat: antlrAstId, parse: antlrParse }, loc);
const slangParser = {
astFormat: slangAstId,
parse: slangParse,
locStart,
locEnd
};
const parsers = {
[slangParserId]: slangParser,
[antlrParserId]: antlrParser
};
const antlrCanAttachComment = (node) => typeof node.type === 'string' &&
node.type !== 'BlockComment' &&
node.type !== 'LineComment';
const canAttachComment = (node) => typeof node !== 'string' &&
typeof node !== 'undefined' &&
node.kind && // Make sure it's not Location
!isComment(node);
// https://prettier.io/docs/en/plugins.html#printers
const antlrPrinter = {
canAttachComment: antlrCanAttachComment,
handleComments: {
ownLine: comments.solidityHandleOwnLineComment,
endOfLine: comments.solidityHandleEndOfLineComment,
remaining: comments.solidityHandleRemainingComment
},
isBlockComment: comments.isBlockComment,
massageAstNode,
print: antlrPrint,
printComment: comments.printComment
};
const slangPrinter = {
canAttachComment,
handleComments,
isBlockComment,
massageAstNode,
print: slangPrint,
printComment
};
const printers = {
[slangAstId]: slangPrinter,
[antlrAstId]: antlrPrinter
};
// https://prettier.io/docs/en/plugins.html#defaultoptions
const defaultOptions = {
bracketSpacing: false,
tabWidth: 4
};
export default { languages, parsers, printers, options, defaultOptions };
//# sourceMappingURL=index.js.map