如何在github上评论PR上的特定行号
我正在尝试编写一个小脚本,可以使用eslint输出对github PRs进行注释 问题是eslint给出了每个错误的绝对行号。 但是GithubAPI需要相对于差异的行号 从github API文档: 要对文件中的特定行进行注释,首先需要 确定差异中的位置。GitHub提供 application/vnd.github.v3.diff介质类型,您可以在 查看请求差异的前一个请求。差异需要 被解释为从文件中的行转换到文件中的某个位置 差异。位置值是从下到下的行数 您要评论的文件中的第一个“@@”大块头 紧靠“@@”线下方的一行是位置1,下一行是 位置2,依此类推。文件差异中的位置将继续保持不变 通过空白行和额外的大块增加,直到新的 已到达文件。 因此,如果我想在上图中的新行5上添加注释,那么我需要将12传递给API 我的问题是如何轻松地将eslint在错误消息中给出的新行号映射到githubapi所需的相对行号 到目前为止我都试过了 我使用它将GithubAPI提供的diff转换为json对象如何在github上评论PR上的特定行号,github,github-api,eslint,Github,Github Api,Eslint,我正在尝试编写一个小脚本,可以使用eslint输出对github PRs进行注释 问题是eslint给出了每个错误的绝对行号。 但是GithubAPI需要相对于差异的行号 从github API文档: 要对文件中的特定行进行注释,首先需要 确定差异中的位置。GitHub提供 application/vnd.github.v3.diff介质类型,您可以在 查看请求差异的前一个请求。差异需要 被解释为从文件中的行转换到文件中的某个位置 差异。位置值是从下到下的行数 您要评论的文件中的第一个“@@”大
[{
"chunks": [{
"content": "@@ -,OLD_TOTAL_LINES +NEW_STARTING_LINE_NUMBER,NEW_TOTAL_LINES @@",
"changes": [
{
"type": STRING("normal"|"add"|"del"),
"normal": BOOLEAN,
"add": BOOLEAN,
"del": BOOLEAN,
"ln1": OLD_LINE_NUMBER,
"ln2": NEW_LINE_NUMBER,
"content": STRING,
"oldStart": NUMBER,
"oldLines": NUMBER,
"newStart": NUMBER,
"newLines": NUMBER
}
}]
}]
我正在考虑下面的算法
- 创建一个新行号数组,从
到new\u start\u line\u NUMBER
NEW\u start\u LINE\u NUMBER+每个文件的NEW\u TOTAL\u LINE
- 从每个数字中减去
,使其成为另一个数组newStart
relativeLineNumbers
- 遍历数组,并为每个删除的行(
)增加相应的剩余type===“del”
relativeLineNumbers
- 对于另一个大块头(具有
的行),减少相应的剩余@
相对枚举数
- 我找到了解决办法。我没有把它放在这里,因为它涉及简单的循环,没有什么特别的。但不管怎样,现在回答是为了帮助别人
我打开了一个pull请求来创建类似的情况,如问题中所示
使用GithubAPI可以获得差异数据
diff --git a/test.js b/test.js
index 2aa9a08..066fc99 100644
--- a/test.js
+++ b/test.js
@@ -2,14 +2,7 @@
var hello = require('./hello.js');
-var names = [
- 'harry',
- 'barry',
- 'garry',
- 'harry',
- 'barry',
- 'marry',
-];
+var names = ['harry', 'barry', 'garry', 'harry', 'barry', 'marry'];
var names2 = [
'harry',
@@ -23,9 +16,7 @@ var names2 = [
// after this line new chunk will be created
var names3 = [
'harry',
- 'barry',
- 'garry',
'harry',
'barry',
- 'marry',
+ 'marry', 'garry',
];
现在只需将此数据传递到diff parse
模块并进行计算
var parsedFiles=parseDiff(数据);//差分输出
parsedFiles.forEach(
函数(文件){
var相对线=0;
file.chunks.forEach(
函数(块、索引){
if(index!==0)//每个块的相对行号应该增加
relativeLine++;//第一行除外(参见图中的rel第16行)
chunk.changes.forEach(
职能(变更){
相对线++;
console.log(
改变类型,
change.ln1?change.ln1:'-',
change.ln2?change.ln2:'-',
change.ln?change.ln:'-',
相对线
);
}
);
}
);
}
);
这会打印出来
type (ln1) old line (ln2) new line (ln) added/deleted line relative line
normal 2 2 - 1
normal 3 3 - 2
normal 4 4 - 3
del - - 5 4
del - - 6 5
del - - 7 6
del - - 8 7
del - - 9 8
del - - 10 9
del - - 11 10
del - - 12 11
add - - 5 12
normal 13 6 - 13
normal 14 7 - 14
normal 15 8 - 15
normal 23 16 - 17
normal 24 17 - 18
normal 25 18 - 19
del - - 26 20
del - - 27 21
normal 28 19 - 22
normal 29 20 - 23
del - - 30 24
add - - 21 25
normal 31 22 - 26
现在,您可以使用相对行号使用GithubAPI发布注释
出于我的目的,我只需要新添加的行的相对行号,但是使用上面的表也可以获得删除行的相对行号
这是我在其中使用的linting项目的链接 你找到解决办法了吗?@Wärting是的,补充了一个详细的答案。如果您在这方面需要帮助,请告诉我:)