Меняем javascript с помощью javascript

29
Меняем JavaScript с помощью JavaScript Павел Волокитин

Upload: pavel-volokitin

Post on 13-Jan-2017

82 views

Category:

Software


8 download

TRANSCRIPT

Page 1: Меняем javascript с помощью javascript

Меняем JavaScript

с помощью JavaScript

Павел Волокитин

Page 2: Меняем javascript с помощью javascript

const React = require('react');

import React from 'react';

Page 3: Меняем javascript с помощью javascript

const React = require('react');

import React from 'react';

/const (\w+) = require\('([^']+')\);/

→ import $1 from '$2';

Page 4: Меняем javascript с помощью javascript

forEach(arr, function(item) { console.log(item); });

for (const item of arr) { console.log(item); }

Page 5: Меняем javascript с помощью javascript

define(['react'], function(React) { return {...}; });

const React = require('react');

module.exports = {...};

AMD

CommonJS

Page 6: Меняем javascript с помощью javascript

Abstract Syntax Tree

Page 7: Меняем javascript с помощью javascript

1 + 2 + 3

Abstract Syntax Tree

Page 8: Меняем javascript с помощью javascript

1 + 2 + 3

BinaryExpr +

BinaryExpr +

1 2

3

Abstract Syntax Tree

Page 9: Меняем javascript с помощью javascript

1 + 2 + 3

BinaryExpr +

BinaryExpr +

1 2

3

console.log(123)

Abstract Syntax Tree

Page 10: Меняем javascript с помощью javascript

1 + 2 + 3

BinaryExpr +

BinaryExpr +

1 2

3

console.log(123)

CallExpr

MemberExpr

Identifier "console"

Identifier "log"

123

Abstract Syntax Tree

Page 11: Меняем javascript с помощью javascript

jscodeshift

astexplorer.net

Page 12: Меняем javascript с помощью javascript

Demo: astexplorer

Page 13: Меняем javascript с помощью javascript

–Parse –Find –Replace –Print

Page 14: Меняем javascript с помощью javascript

react-codemod

Page 15: Меняем javascript с помощью javascript

const Comp = React.createClass({

getDefaultProps() { return {size: 10}; },

getInitialState() { return {focused: false}; },

render() {...}, });

Page 16: Меняем javascript с помощью javascript

class Comp extends React.Component {

static defaultProps = {size: 10};

state = {focused: false};

render() {...} }

Page 17: Меняем javascript с помощью javascript

Demo: React class

Page 18: Меняем javascript с помощью javascript

–Parse –Find –Replace –Print

Page 19: Меняем javascript с помощью javascript

Demo: nuclide outline Demo: react-docgen Demo: modules

Page 20: Меняем javascript с помощью javascript

Трудности

Page 21: Меняем javascript с помощью javascript

–Parse –Find –Replace –Print

Page 22: Меняем javascript с помощью javascript

–Parse –Find –Replace –Print

recast

Page 23: Меняем javascript с помощью javascript

function f(a, b) { ... }

function fn( argumentOne, argumentTwo, ) { ... }

Page 24: Меняем javascript с помощью javascript

obj = { one: 1, two: 2, };

obj = {

func() {},

value: null, };

Page 25: Меняем javascript с помощью javascript
Page 26: Меняем javascript с помощью javascript

– recast/lib/printer.js

Page 27: Меняем javascript с помощью javascript

const React = require('react');

obj = {

one: 1,

two: 2, };

– recast/lib/printer.js–Временные ноды

$$newline;

$$newline,

$$newline,

Page 28: Меняем javascript с помощью javascript

const React = require('react');

obj = {

one: 1,

two: 2, };

– recast/lib/printer.js–Временные ноды

Page 29: Меняем javascript с помощью javascript

Спасибо