SonarQube 代码有异味,因为它在三个选项中的两个选项中忽略了“this”
Posted
技术标签:
【中文标题】SonarQube 代码有异味,因为它在三个选项中的两个选项中忽略了“this”【英文标题】:SonarQube code smell due to it ignoring `this` in two of three options 【发布时间】:2021-11-14 09:41:36 【问题描述】:这是我面临的问题的一个示例。
我怀疑我在这段代码中得到this error 的原因是因为根据javascript:3AS3800
...
返回
this
的函数将被忽略。
假设是这种情况,我很难想出一个干净的解决方法。
if (typeof (row) === 'string')
return (
<Grid key=i>
<Divider className=classes.divider />
<Typography>
row
</Typography>
</Grid>
)
if (row.constructor === Array)
return row.map((item, index) => (
<Grid key=index>
this.getItem(item, formProps)
</Grid>
))
return (
<Grid key=i>
this.getItem(row, formProps)
</Grid>
)
【问题讨论】:
我认为一个有用的观点是这不是一个“错误”,而是一个“问题”。当 SonarQube 报告问题时,它会使用所有可用的信息,以及有时有争议的指南。 “修复” SonarQube 报告的所有问题是不合理的。在这种情况下,如果 TypeScript 以我认为的方式工作,我认为你根本无法“修复”这个问题。 @DavidM.Karr,如果我最初的观察是这样的话,这是有道理的,但是它只是向我指出,一个返回块正在返回一个网格列表,而其余的则不是。案件结案。 【参考方案1】:对于那些可能偶然发现这一点的人,我误解了错误消息。
Sonarqube 希望每个返回值都是相同的 type
。在我的示例中,中间块返回Grid
组件列表,而其余块返回单独的Grid
组件。解决方案是将单独的 Grid
组件作为列表返回,如下所示:
if (typeof (row) === 'string')
return ([
<Grid key=i>
<Divider className=classes.divider />
<Typography>
row
</Typography>
</Grid>,
])
if (row.constructor === Array)
return row.map((item, index) => (
<Grid key=index>
this.getItem(item, formProps)
</Grid>
))
return ([
<Grid key=i>
this.getItem(row, formProps)
</Grid>,
])
【讨论】:
以上是关于SonarQube 代码有异味,因为它在三个选项中的两个选项中忽略了“this”的主要内容,如果未能解决你的问题,请参考以下文章