prettier-on-scrapbox
このUserScriptはメンテナンスできなくなったため、削除されました。もう動きません。
使い方
UserScriptに以下を追加
code:script.js
import '/api/code/mizdra/prettier-on-scrapbox/script.js'
window.userPrettierConfig = {
trailingComma: 'all',
tabWidth: 2,
semi: false,
singleQuote: true,
arrowParens: 'always',
proseWrap: 'never',
}
プレビュー
https://gyazo.com/112012f88d1daaa0c451e5e5baafe317
ソースコード跡地
code:script.js
import prettier from '/api/code/mizdra/prettier%2Fstandalone/script.js'
import babylonParser from '/api/code/mizdra/prettier%2Fparser-babylon/script.js'
import typescriptParser from '/api/code/mizdra/prettier%2Fparser-typescript/script.js'
import graphqlParser from '/api/code/mizdra/prettier%2Fparser-graphql/script.js'
import { Parser } from '/api/code/mizdra/scrapbox-parser/script.js'
function getParser(lang) {
return {
javascript: 'babel',
typescript: 'typescript',
graphql: 'graphql',
}
function formatCodeBlock(codeBlock) {
const { lang, text, headerText, codeText, headerIndentSize } = codeBlock
const parser = getParser(lang)
if (!parser) return text
const config = {
parser,
...window.userPrettierConfig,
}
const formattedCodeText = prettier
.format(codeText, config)
.split('\n')
.map((line) => ${' '.repeat(headerIndentSize)} ${line})
.join('\n')
.trimEnd() // prettierが末尾に改行を挿入するので削除する
const formattedText = ${headerText}\n${formattedCodeText}
console.log(formattedText)
return formattedText
}
scrapbox.PopupMenu.addButton({
title: 'Format',
onClick: (text) => {
const parser = new Parser(text)
const nodes = parser.parse()
const result = nodes
.map((node) => {
console.log(node)
if (node.type === 'CodeBlock') return formatCodeBlock(node)
else return node.text
})
.join('\n')
return result
},
})