2017-07-18 8 views
0

私は、このスクリプトで任意の親を持っていない表現を呼び出す見つけたい:ここjscodeshiftで親を持たないノードを見つける方法?

1 + 1 

function parent() { 
    2 + 2 
} 

3 + 3 

私は1 + 13 + 3ノードではなく2 + 2を取得したいです。

私は何を達成したいことのようになります。

j(file.source).find(j.ExpressionStatement, { 
    parent: null 
}); 

ので式が親を持っている場合は見つけることができるようにフィルタはありますか? (安全でない)インデントを使用

答えて

0

ASTノードのLOC属性は、インデント属性を有しています。インデントは0であればそれはトップレベルの表現であると仮定することができたとき:

j(file.source).find(j.ExpressionStatement, { 
    loc: {indent: 0} 
}); 

それがインデントに依存するので、これは本当に堅牢ではありません。

私は属性の上にフィルタする安全な方法を見つけることができなかったので、第二のフィルタ

とチェーン。 jscodeshiftの.filter()を使用して親ノードを取得することもできます。プログラムの場合は、トップレベルにする必要があります。

j(file.source).find(j.ExpressionStatement) 
       .filter(path => j.Program.check(path.parent.value)); 
関連する問題