0

我有一些源代码文件,我想在其中提取所有注释(C 风格)并在它们中搜索特定的构造,然后我可以在源生成器中使用它来制作一些额外的代码......

例子:

...
var v = something();//comment I just want to skip
//record Car (
//string CarId This is the CarId
//)
var whatever = ()=>{...};
/*record AnotherCar(
  string CarId This is the CarId
)*/
...

我有2个问题。首先,我不知道如何跳过除评论之外的所有内容,其次如何让它只返回其中编码的记录?或者,只需搜索关键字并尝试从那里解析,但也无法弄清楚。

4

1 回答 1

0

老问题,但答案可能对某人有所帮助。

首先,我不知道如何跳过除评论之外的所有内容,其次如何让它只返回其中编码的记录?

您可以使用 Linq 查询来解析序列并仅选择您需要的内容,如下所示:

//Extract comments from CSharp code
    public static  IEnumerable<string> GetComments(string text)
        {
            CommentParser comment = new CommentParser();
            var separators = Parse.String("//").Or(Parse.String("/*"));
            Parser<string> comments =
                from _ in Parse.AnyChar.Except(separators).Many().Text()   //ignore
                from c in comment.AnyComment     // select
                select c;
            var result = comments.Many().Parse(text);            
            return result;
        }

输出结果

comment I just want to skip
record Car (
string CarId This is the CarId
)
record AnotherCar(
  string CarId This is the CarId
)

试试看

于 2021-12-10T12:02:27.810 回答