如何在javascript中找到特定行号的源代码?

时间:2017-03-16 10:04:06

标签: javascript node.js jasmine

我有vanilla js文件的行号,我需要找到该特定行的源代码,然后是父函数。我正在使用node.js,并想知道是否有办法提取源代码和可能知道该特定行的父函数。

function helloworld(){
   var a=5;
   var b=6; //line number 3
}

对于上述功能,我需要的函数helloworld只有行号?

编辑更清晰:

当代码被推入回购时我们可以得到发生变化的行号。使用这些行号我想找到父函数,如上所述。我想找到父函数的名称所以我只能运行特定的jasmine测试文件。

实施例: 假设我有一个像这样的茉莉花规格文件:

describe("helloworld",function(){
   it("test1",function(){
      expect(true).toBe(true)
});
});
describe("someotherfun",function(){
   it("test2",function(){
     expect(true).toBe(true)
  })
})

说有一个这样的脚本文件:

function helloworld(){ . //line 1
    console.log('hi') .  //line 2
}
function someotherfun(){
    console.log('hi')
} . //line 6

让我们说一些编辑第2行我想得到helloworld的名字,所以我可以稍后解析茉莉花规格文件并将x添加到所有规格,除了更改的那个。这个例子将解释我的意思:< / p>

describe("helloworld",function(){
   it("test1",function(){
      expect(true).toBe(true)
});
});
xdescribe("someotherfun",function(){ //wont run this test because this function was not modified
   it("test2",function(){
     expect(true).toBe(true)
  })
})    

现在我可以添加解析我的jasmine文件并在描述之前添加x,但我想知道的是修改后的特定行的父函数。

2 个答案:

答案 0 :(得分:0)

我有点像传统主义者,所以我编写了shell脚本来完成这些工作。 在终端中尝试此命令:$head -<LineNumber> <FullPathToFile> | tac | grep -m 1 "PatternYouWantToMatch"

例如,head -50 /home/test.js | tac | grep -m 1 "function"

说明:

  • head 命令将获取所有行,直到您给出的行号
  • tac 命令将颠倒行的顺序,即第一行将成为最后一行,反之亦然。
  • grep -m 1 将与倒置文件中的第一个模式匹配。

不是最好的解决方案,但它会让你的事情完成!希望它有用。

答案 1 :(得分:-1)

我希望有一种从文件中提取函数及其名称的神奇方法,但我知道如果你使用JS来提取它,我希望我没错。

但是,如果您需要在JS中执行此操作,raw-loader可以帮助您。加载原始文件可以完成工作,但您必须自己手动解析它。它显然以原始格式加载任何文件,您可以手动遍历文件。我们还用它来提取我们的JSDoc。