Skip to content

Instantly share code, notes, and snippets.

@erukiti
erukiti / add-comment.js
Created November 15, 2017 13:51
templateを使ったヤツ、ソース中一回しか有効にならない件
const template = require('babel-template')
const {parse} = require('babylon')
const {transform} = require('@babel/core')
const prettier = require('prettier')
const assert = require('assert')
const src =
`function hoge(a: number): number {
return a
@erukiti
erukiti / add-comment.js
Last active November 15, 2017 13:10
AST操作でコメント付与の実験
const template = require('babel-template')
const {parse} = require('babylon')
const {transform} = require('@babel/core')
const prettier = require('prettier')
const src =
`function hoge() {
}
`
@erukiti
erukiti / index.js
Last active November 12, 2017 13:26
s2s-handler-pegjs
//@flow
import peg from 'pegjs'
import type { Code } from 'types'
export default function pegjsHandler(code: Code): Code {
if (code === '') {
return ''
}
@erukiti
erukiti / s2s.config.js
Last active November 11, 2017 10:42
s2s-handler-peg s2s-handler-json
const path = require('path')
const peg = require('pegjs')
const pegHandler = (code, {eventPath, plugin, filename}) => {
return peg.generate(code, {output: 'source', format: 'commonjs'})
}
const jsonHandler = (code, {eventPath, plugin, filename}) => {
const objectName = path.basename(filename, '.json').replace(/-[a-z]/g, s => s.substr(1).toUpperCase())
return `const ${objectName} = ${code}\nmodule.exports = ${objectName}`
@erukiti
erukiti / definition2.md
Last active November 10, 2017 07:26
定義を元に、t.hogeExpression(....) を自動生成できるようにしたやつ

ArrayExpression

aliases

Expression

AssignmentExpression

aliases

@erukiti
erukiti / babel-types-all.md
Last active November 8, 2017 12:43
babel-types のcore定義を表にしたもの
where Node property alias
core.js ArrayExpression elements (null, Expression, SpreadElement) Expression
core.js AssignmentExpression operator (string), left (LVal), right (Expression) Expression
core.js BinaryExpression operator (BINARY_OPERATORS), left (Expression), right (Expression) Binary, Expression
core.js Directive value (DirectiveLiteral)
core.js DirectiveLiteral value (string)
core.js BlockStatement body (Statement), directives (Directive) Scopable, BlockParent, Block, Statement
core.js BreakStatement label (Identifier) Statement, Terminatorless, CompletionStatement
core.js CallExpression callee (Expression), arguments (Expression, SpreadElement, JSXNamespacedName), typeParameters (TypeParameterInstantiation), optional (true, false) Expression
@erukiti
erukiti / test.js
Created November 7, 2017 06:46
s2sでコメントを挿入する実験 (Babel6でも動くバージョン)
const plugin = babel => {
const {types: t} = babel
return {
inherits: inheritsOpts,
name: 's2s-jsdoc-creator',
visitor: {
Function(nodePath, state) {
const comment = `*
* @hoge
@erukiti
erukiti / test.js
Created November 6, 2017 02:47
babel-core 6と7で挙動が違う
const {transform} = require('babel-core')
const src = 'function hoge() {}'
const plugin = () => {
const visitor = {
Function: (nodePath) => {
nodePath.addComment('leading', 'hoge')
}
}
@erukiti
erukiti / proxy-spike1.js
Created November 1, 2017 07:24
うーん、Proxyだけで演算子オーバーライドを実現するのは無理っぽい?
class Fraction {
constructor(num, denom) {
this.num = num
this.denom = denom
this._reduce()
}
_reduce() {
if (this.num === 0) {
this.denom = 1
const generateObject = (scope, ...nodes) => {
return t.objectExpression(
nodes.map(node => {
return t.objectProperty(scope.generateUidIdentifier(), node)
})
)
}