【问题标题】:How to get the filename and line number of a particular JetBrains.ReSharper.Psi.IDeclaredElement?如何获取特定 JetBrains.ReSharper.Psi.IDeclaredElement 的文件名和行号?
【发布时间】:2011-07-28 06:37:01
【问题描述】:

我想为 resharper 编写一个测试框架扩展。相关文档在这里:http://confluence.jetbrains.net/display/ReSharper/Test+Framework+Support

这方面的一个方面是表明特定代码段是否是测试的一部分。这段代码表示为 IDeclaredElement。

是否可以获取特定IDeclaredElement表示的一段代码的文件名和行号?

跟进以下回复:

@Evgeny,感谢您的回答,不知道您能否为我澄清一点。

假设用户在 Visual Studio 中打开了这个测试:https://github.com/fschwiet/DreamNJasmine/blob/master/NJasmine.Tests/SampleTest.cs 假设用户在第 48 行右击“player.Resume()”表达式。 IDeclaredElement 会具体告诉我他们想在第 48 行运行吗?还是会给我一个对应整个类的IDeclaredElement,以及整个类的文件名/行号范围?

我应该自己玩这个,但我很欣赏你已经知道的东西。

【问题讨论】:

    标签: resharper resharper-plugins resharper-sdk


    【解决方案1】:

    是的。

    “IDeclaredElement”实体是代码符号(类、方法、变量等)。它可以从程序集元数据中加载,可以在源代码中声明,也可以隐式来自源代码。

    你可以使用

    var declarations = declaredElement.GetDeclarations() 
    

    获取所有声明它的 AST 元素(例如,这可以返回部分类的多个声明)

    然后,对于任何 IDeclaration,您都可以使用

    var documentRange = declaration.GetDocumentRange()
    if (documentRange.IsValid())
      Console.WriteLine ("File: {0} Line:{1}",
     DocumentManager.GetInstance(declaration.GetSolution()).GetProjectFile(documentRange.Document).Name,
    documentRange.Document.GetCoordsByOffset(documentRange.TextRange.StartOffset).Line
    );
    

    顺便问一下,您正在开发哪个测试框架扩展?

    【讨论】:

    • 感谢您的回复。框架在这里:github.com/fschwiet/DreamNJasmine.
    • Evgeny 我更新了问题,以寻求有关将返回的内容的更多详细信息。感谢您的帮助。
    【解决方案2】:

    IDeclaredElement 是否会具体告诉我他们想要在 第 48 行?

    再一次:IDeclaredElement 在文件中没有位置。相反,它的声明拥有它们。 对于每个声明(IDeclaration 是一个常规的 AST 节点),文档中都有一个覆盖它的范围。在我之前的示例中,我使用了 TextRange.StartOffset,但您可以使用 TextRange.EndOffset。

    如果需要更精确的文件位置,请遍历AST树,查看文件中具体的表达/语句坐标

    【讨论】:

    • 感谢 Evgeny。我不介意 IDeclaredElement 和 GetDeclarations() 返回的对象之间的区别,因为我对整体功能更感兴趣——我是否可以在单击的委托中获取特定元素。听起来这将在 AST 中可用。我专注于行号,但想想这很草率,因为有人可以在同一行上放很多其他东西。无论如何,干杯
    猜你喜欢
    • 2018-09-04
    • 1970-01-01
    • 2014-01-06
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    相关资源
    最近更新 更多