diff --git a/apps/remix-ide/src/app/plugins/code-format.ts b/apps/remix-ide/src/app/plugins/code-format.ts index 98aa13e221..a6846d3c18 100644 --- a/apps/remix-ide/src/app/plugins/code-format.ts +++ b/apps/remix-ide/src/app/plugins/code-format.ts @@ -2,8 +2,7 @@ import { Plugin } from '@remixproject/engine' import prettier from 'prettier/standalone' import { Options } from 'prettier'; -import * as sol from 'prettier-plugin-solidity' -import { parse } from './code-format/parser' +import sol from './code-format/index' import * as ts from 'prettier/parser-typescript' import * as babel from 'prettier/parser-babel' import * as espree from 'prettier/parser-espree' @@ -21,15 +20,6 @@ export class CodeFormat extends Plugin { constructor() { super(profile) - // need to change the parser in the npm package because it conflicts with the parser already in the app - const loc = { - locEnd: (node) => getRange(1, node), - locStart: (node) => getRange(0, node) - } - const parser = { astFormat: 'solidity-ast', parse, ...loc }; - sol.parsers = { - 'solidity-parse': parser - } } async format() { @@ -67,7 +57,7 @@ export class CodeFormat extends Plugin { break } const result = prettier.format(content, { - plugins: [sol, ts, babel, espree], + plugins: [sol as any, ts, babel, espree], parser: parserName, ...options }) diff --git a/apps/remix-ide/src/app/plugins/code-format/index.ts b/apps/remix-ide/src/app/plugins/code-format/index.ts new file mode 100644 index 0000000000..777009974c --- /dev/null +++ b/apps/remix-ide/src/app/plugins/code-format/index.ts @@ -0,0 +1,61 @@ +import { handleComments, printComment } from 'prettier-plugin-solidity/src/comments'; +import massageAstNode from 'prettier-plugin-solidity/src/clean.js'; +import options from 'prettier-plugin-solidity/src/options.js'; +import print from 'prettier-plugin-solidity/src/printer.js'; +import loc from 'prettier-plugin-solidity/src/loc.js'; +import { parse } from './parser' + +// https://prettier.io/docs/en/plugins.html#languages +// https://github.com/ikatyang/linguist-languages/blob/master/data/Solidity.json +const languages = [ + { + linguistLanguageId: 237469032, + name: 'Solidity', + type: 'programming', + color: '#AA6746', + aceMode: 'text', + tmScope: 'source.solidity', + extensions: ['.sol'], + parsers: ['solidity-parse'], + vscodeLanguageIds: ['solidity'] + } +]; + +// https://prettier.io/docs/en/plugins.html#parsers +const parser = { astFormat: 'solidity-ast', parse, ...loc }; +const parsers = { + 'solidity-parse': parser +}; + +const canAttachComment = (node) => + node.type && node.type !== 'BlockComment' && node.type !== 'LineComment'; + +// https://prettier.io/docs/en/plugins.html#printers +const printers = { + 'solidity-ast': { + canAttachComment, + handleComments: { + ownLine: handleComments.handleOwnLineComment, + endOfLine: handleComments.handleEndOfLineComment, + remaining: handleComments.handleRemainingComment + }, + isBlockComment: handleComments.isBlockComment, + massageAstNode, + print, + printComment + } +}; + +// https://prettier.io/docs/en/plugins.html#defaultoptions +const defaultOptions = { + bracketSpacing: false, + tabWidth: 4 +}; + +export default { + languages, + parsers, + printers, + options, + defaultOptions +};