2017-03-07 12 views
0

축소 된 자바 스크립트 파일이 있습니다. 개행과 들여 쓰기를 삽입하기 위해 다양한 도구를 통해 보낼 수 있습니다. 그때 내가 원하는 것은 변수 이름을 수정하는 것입니다. 나는 어떤 도구도 이것을 자동으로 할 수 없다는 것을 알고있다. 필요한 것은 수동으로 시도하려는 시도를 보강하는 도구입니다. 내가 다른 범위 곳에서 heightlengthcd 이름을 변경하고 j()move()에 해당 변경 사항이 같은cdj가 사용되는 모든 곳에서 이루어집니다,하지만 때 있도록 범위 규칙을 인식 할 필요가 같은 이름을 가진 다른 변수와 함수가 존재합니다.변수 및 함수의 수동 축소를 안내하는 도구입니까?

소형화를 위해 특별히 설계된 도구가 있습니까? 이 특정 작업을위한 도구가 없다면 적어도 범위 규칙에 따라 이름 바꾸기 변수 또는 메서드를 처리 할 수있는 스마트 IDE가 있습니까?

답변

1

리팩토링의 이름을 잘 바꾸는 브라우저 내/다운로드 가능한 node.js 라이브러리 도구가 있습니다. Esprima은 다음과 같은 ES6 코드 (예제에서 약간 수정 됨)를 처리하여 전역 범위 hi 중 하나의 이름을 변경할 때 hi 이름 만 주석 블록으로 묶습니다. (더 나은 방법을 생각할 수 없었습니다. 마크 다운이 코드 블록에 표시되지 않으므로 코드를 호출하십시오. 죄송합니다.)

// Array shuffling code from Underscore.js, code modified from base example on http://esprima.org/demo/rename.html 
var shuffled; 

var /*hi*/ = 'hi'; // initial declaration 

function /*hi*/() { // modifies var above 
    this.shuffle = 'x'; 
} 

_.shuffle = function(obj) { 
    function hi() { 
     return 'hello'; 
    } 
    var shuffled = [], rand; 
    each(obj, function(value, index, list) { 
     rand = Math.floor(Math.random() * (index + 1)); 
     shuffled[index] = shuffled[rand]; 
     shuffled[rand] = value; 
    }); 
    hi(); // calls function defined above, name not changed by change to global scope 'hi' 
    console.log(hello); // considered to be the same as the let statement below even though this is a syntax error since let doesn't get hoisted like var 
    return shuffled; 
}; 

let hello = 'hello'; 

function hiNotInScope() { 
    var hi = 'something else'; // not in global scope, so change to global hi doesn't change this 
    console.log(hi); // changed if the hi in this scope is changed 
} 

// hi (not changed since it's in a comment) 

/*hi*/(); // calls global hi function. 
더 코드 오류가없는만큼 규칙을 범위 지정 존중하는 것

(예를 들어, let 위에 게양됩니다 같은 이름의 var 선언 위의 let 선언에-범위로 간주되지만 이는 구문 오류이므로 문제가되지 않습니다.)