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”的主要内容,如果未能解决你的问题,请参考以下文章

sonarqube异味导出到excel

如何限制用户更新错误、代码异味、漏洞、重复

SonarQube学习入门指南

jenkins集成sonarQube实现代码质量检查

SonarQube的代码坏味道

用于代码气味的 SonarQube Web API - 技术债务计数