Git Product home page Git Product logo

sonar-next / sonar-swift Goto Github PK

View Code? Open in Web Editor NEW
224.0 15.0 40.0 1.92 MB

sonar-swift.SonarQube iOS Plugin, Support Objective-C/Swift/Java, Support import Infer Issue (SonarQube iOS 代码扫描插件,支持 Objective-C 和 Swift / Java,支持 Infer 结果导入 ) base on https://github.com/Idean/sonar-swift

License: Other

Shell 2.79% Java 89.93% Objective-C 3.07% Swift 0.03% Groovy 1.39% ANTLR 2.80%
sonarqube-ios swift sonar-swift sonarqube sonarqube-plugin objective-c static-analysis sonar-objectivec swiftlint infer

sonar-swift's Introduction

SonarQube iOS 代码扫描插件

English:English

介绍

静态代码扫描是一种检测项目代码的方式,能够在不运行代码的情况下对代码进行扫描,可以扫描出代码的 Bug (例如空指针)、漏洞、坏味道(例如方法内代码行数量过多)等,另外可以检测仓库的代码重复率,注释率,注释行,代码行数,复杂度等信息。 静态代码扫描可以在代码上线之前执行,并且具有执行成本低等特点,被广泛应用于 CI 流水线上。

SonarQube 是一个静态代码扫描服务,https://www.sonarqube.org/ ,支持主流语言的代码扫描,其社区版本在 GitHub 开源,地址:https://github.com/SonarSource/sonarqube。 但是对于部分语言,社区版本并不支持,例如 Objective-C 和 Swift ,本仓库希望解决的就是这两种语言的静态代码扫描分析。

SonarQube 作为一款成熟的代码扫描服务,对外提供了插件功能,支持将第三方的扫描工具的结果导入到SonarQube展示,本仓库基于 https://github.com/Idean/sonar-swift 二次开发,在原先功能的基础上新增了 Facebook Infer 扫描结果的导入。

本仓库作为 SonarQube 的iOS代码扫描插件,支持 Objective-C 语言和 Swift 语言,支持导入 SwiftLint、Infer、OCLint、Lizard、Fauxpas 工具的扫描分析结果。

ChangeLog 更新日志

1.6 版本之后最低要求 SonarQube 7.9

规则最佳实践

我们在公司内部邀请其他同事共同Review了现有的Infer规则,筛选出了部分规则进行扫描,供大家参考。

支持的工具介绍

Infer

Infer 是由Facebook公司推出的静态代码扫描工具,支持 C/C++/Java/Objective-C 语言的扫描。

链接:https://github.com/facebook/infer

Swiftlint

Swiftlint 是检查 Swift 代码风格和规定的静态代码分析工具,基本上以 GitHub's Swift 代码风格指南为基础,报告的问题支持在 XCode 上展示,并且可以生成报告文件,我们将读取生成的报告文件,然后上传到 SonarQube 中。

链接:https://github.com/realm/SwiftLint

lizard

lizard 可以分析出 Objective-C 语言的圈复杂度,生成 xml 文件,导入到 SonarQube 的结果中。

链接:https://github.com/terryyin/lizard

OCLint

OCLint 是一个针对于 C/C++/Objective-C 语言的静态代码分析工具,它与Infer不同的是,它更偏向于对代码规范一类问题的扫描,所以我们将 OCLint 部分的问题归类到 坏味道 上面。

链接:https://github.com/oclint/oclint

Fauxpas

Faux Pas 是一款商业软件,支持对 Objective-C 语言进行扫描分析。

链接:http://fauxpasapp.com/

下载

https://github.com/tal-tech/sonar-swift/releases

安装

将 jar 文件放置到 SonarQube 的安装目录下的 extensions/plugins/ 目录下,然后重启 SonarQube

使用方式

参考以下脚本使用

  1. 执行 xcodebuild,并将 log 记录输出到文件
  2. 使用 xcpretty 将log日志输出为 json 格式
  3. 执行 infer 分析,配置并忽略第三方的代码目录,导入刚刚的 json 编译日志
  4. 执行 swiftlint ,并将结果输出到文件
  5. 使用 lizard 以 xml 格式输出
  6. 执行 SonarScanner ,并填写报告路径

参考执行脚本

xcodebuild clean build -workspace app.xcworkspace -scheme scheme -destination 'generic/platform=iOS' COMPILER_INDEX_STORE_ENABLE=NO | tee xcodebuild.log > /dev/null
xcpretty -r json-compilation-database -o compile_commands.json < xcodebuild.log > /dev/null
# --skip-analysis-in-path 是忽略扫描目录
infer run --skip-analysis-in-path Pods --compilation-database compile_commands.json

# 可选,如果有 swift 语言使用
# swiftlint lint > swiftlint.txt

# 可选,Java 语言
# infer run -- ./gradlew build
# 在命令后添加 -Dsonar.java.infer.report=infer-out/report.json

# 可选,如果想计算 复杂度 使用
# lizard --xml > lizard-report.xml
# 在命令后添加 -Dsonar.swift.lizard.report=lizard-report.xml
sonar-scanner -Dsonar.host.url=http://sonarqube -Dsonar.projectKey=app -Dsonar.sources=. -Dsonar.swift.swiftlint.report=swiftlint.txt  -Dsonar.swift.infer.report=infer-out/report.json

# oclint example
-Dsonar.swift.oclint.report=oclint_report.xml

要求

扫描时必须在 macOS 操作系统上运行。

联系我们

你可以通过扫码进入微信群

已知用户

欢迎用户将公司名在 #9 登记(仅供用户参考)

学而思网校 励步 小猴
学而思·爱智康横版标准logo RGB 少年得到 image-20210313150211023
image-20210313150340092 image-20210313150442096

sonar-swift's People

Contributors

akshaysyaduvanshi avatar alex009 avatar bcolvin avatar benjohnde avatar branlute avatar ch-one avatar d591499163 avatar davidy4ng avatar delannoyk avatar egr-ext avatar gaelfoppolo avatar gretzki avatar hugal31 avatar iwang-atlassian avatar kasparskurms avatar mammuth avatar marcusdroy avatar meltenc avatar milch avatar pbernery avatar qiyan2019 avatar sydowma avatar tzwickl avatar viteinfinite avatar wg8 avatar xiaowenvc avatar yrom avatar zewaren avatar zippy1978 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sonar-swift's Issues

ERROR web[][o.s.s.p.PlatformImpl] Web server startup failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdk.internal.loader.ClassLoaders$AppClassLoader@3d4eac69-org.sonar.server.plugins.ServerPluginManager': Initialization of bean failed; nested exception is java.lang.IllegalStateException: Unable to read plugin manifest from jar : /opt/sonarqube/extensions/plugins/sonar-swift-plugin-1.6.1.jar

New Issue Checklist

Issue Description

sonarqube update to https://github.com/SonarSource/sonarqube/releases/tag/9.4.0.54424
https://github.com/sonar-next

sonar-swift update to https://github.com/sonar-next/sonar-swift/releases/tag/v1.6.1

Command executed

sudo chown -R sonaruser:sonaruser /opt/sonarqube
sudo chmod 777 /opt/sonarqube/extensions/plugins/sonar-swift-plugin-1.6.1.jar
systemctl daemon-reload && sudo service sonarqube stop && sudo service sonarqube start && sudo systemctl status sonarqube

`==> /opt/sonarqube/logs/es.log <==
2022.04.04 19:30:32 INFO es[][o.e.t.NettyAllocator] creating NettyAllocator with the following configs: [name=unpooled, suggested_max_allocation_size=256kb, factors={es.unsafe.use_unpooled_allocator=null, g1gc_enabled=true, g1gc_region_size=1mb, heap_size=512mb}]
2022.04.04 19:30:32 INFO es[][o.e.i.r.RecoverySettings] using rate limit [40mb] with [default=40mb, read=0b, write=0b, max=0b]
2022.04.04 19:30:32 INFO es[][o.e.d.DiscoveryModule] using discovery type [zen] and seed hosts providers [settings]
2022.04.04 19:30:32 INFO es[][o.e.g.DanglingIndicesState] gateway.auto_import_dangling_indices is disabled, dangling indices will not be automatically detected or imported and must be managed manually
2022.04.04 19:30:32 INFO es[][o.e.n.Node] initialized
2022.04.04 19:30:32 INFO es[][o.e.n.Node] starting ...
2022.04.04 19:30:32 INFO es[][o.e.t.TransportService] publish_address {127.0.0.1:37333}, bound_addresses {127.0.0.1:37333}
2022.04.04 19:30:33 INFO es[][o.e.b.BootstrapChecks] explicitly enforcing bootstrap checks
2022.04.04 19:30:33 INFO es[][o.e.c.c.Coordinator] cluster UUID [5QN3LZMpTne4vkHYqHNOIQ]
2022.04.04 19:30:33 INFO es[][o.e.c.s.MasterService] elected-as-master ([1] nodes joined)[{sonarqube}{Nc76oY_SRLm5lbvh6skzhQ}{13GSlQInQqW0aPlEw-QMJw}{127.0.0.1}{127.0.0.1:37333}{cdfhimrsw} elect leader, BECOME_MASTER_TASK, FINISH_ELECTION], term: 25, version: 250, delta: master node changed {previous [], current [{sonarqube}{Nc76oY_SRLm5lbvh6skzhQ}{13GSlQInQqW0aPlEw-QMJw}{127.0.0.1}{127.0.0.1:37333}{cdfhimrsw}]}
2022.04.04 19:30:33 INFO es[][o.e.c.s.ClusterApplierService] master node changed {previous [], current [{sonarqube}{Nc76oY_SRLm5lbvh6skzhQ}{13GSlQInQqW0aPlEw-QMJw}{127.0.0.1}{127.0.0.1:37333}{cdfhimrsw}]}, term: 25, version: 250, reason: Publication{term=25, version=250}
2022.04.04 19:30:33 INFO es[][o.e.h.AbstractHttpServerTransport] publish_address {127.0.0.1:9001}, bound_addresses {127.0.0.1:9001}
2022.04.04 19:30:33 INFO es[][o.e.n.Node] started
2022.04.04 19:30:33 INFO es[][o.e.g.GatewayService] recovered [7] indices into cluster_state
2022.04.04 19:30:36 INFO es[][o.e.c.r.a.AllocationService] Cluster health status changed from [RED] to [GREEN] (reason: [shards started [[components][4], [components][3], [components][0]]]).

==> /opt/sonarqube/logs/sonar.20220404.log <==
2022.04.04 19:30:36 INFO app[][o.s.a.SchedulerImpl] Process[es] is up
2022.04.04 19:30:36 INFO app[][o.s.a.ProcessLauncherImpl] Launch process[WEB_SERVER] from [/opt/sonarqube]: /usr/lib/jvm/java-11-openjdk-amd64/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp -XX:-OmitStackTraceInFastThrow --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.management/sun.management=ALL-UNNAMED --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED -Dcom.redhat.fips=false -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -server -javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.10.0.jar=web -Dhttp.nonProxyHosts=localhost|127.*|[::1] -cp ./lib/sonar-application-9.4.0.54424.jar:/opt/sonarqube/lib/jdbc/postgresql/postgresql-42.3.3.jar org.sonar.server.app.WebServer /opt/sonarqube/temp/sq-process4299437899819753834properties
19:30:36.417 [main] INFO com.github.mc1arke.sonarqube.plugin.CommunityBranchAgent - Loading agent
19:30:36.436 [main] DEBUG com.github.mc1arke.sonarqube.plugin.CommunityBranchAgent - Transforming class org.sonar.server.almsettings.MultipleAlmFeatureProvider
19:30:36.521 [main] DEBUG com.github.mc1arke.sonarqube.plugin.CommunityBranchAgent - Transforming class org.sonar.server.newcodeperiod.ws.SetAction
19:30:36.540 [main] DEBUG com.github.mc1arke.sonarqube.plugin.CommunityBranchAgent - Transforming class org.sonar.server.newcodeperiod.ws.UnsetAction

==> /opt/sonarqube/logs/web.log <==
2022.04.04 19:30:36 INFO web[][o.s.p.ProcessEntryPoint] Starting Web Server
2022.04.04 19:30:37 INFO web[][o.a.t.u.n.NioSelectorPool] Using a shared selector for servlet write/read
2022.04.04 19:30:37 INFO web[][o.s.s.p.LogServerVersion] SonarQube Server / 9.4.0.54424 / 5c36a2e19337da136080a276102eaaefce073c68
2022.04.04 19:30:37 INFO web[][o.sonar.db.Database] Create JDBC data source for jdbc:postgresql://localhost/sonardb
2022.04.04 19:30:38 INFO web[][o.s.s.p.ServerFileSystemImpl] SonarQube home: /opt/sonarqube
2022.04.04 19:30:38 INFO web[][o.s.s.u.SystemPasscodeImpl] System authentication by passcode is disabled
2022.04.04 19:30:39 INFO web[][o.s.c.e.CoreExtensionsLoader] Loaded core extensions: Community Branch Plugin
2022.04.04 19:30:39 WARN web[][o.s.c.a.AnnotationConfigApplicationContext] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdk.internal.loader.ClassLoaders$AppClassLoader@3d4eac69-org.sonar.server.plugins.ServerPluginManager': Initialization of bean failed; nested exception is java.lang.IllegalStateException: Unable to read plugin manifest from jar : /opt/sonarqube/extensions/plugins/sonar-swift-plugin-1.6.1.jar
2022.04.04 19:30:39 ERROR web[][o.s.s.p.PlatformImpl] Web server startup failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdk.internal.loader.ClassLoaders$AppClassLoader@3d4eac69-org.sonar.server.plugins.ServerPluginManager': Initialization of bean failed; nested exception is java.lang.IllegalStateException: Unable to read plugin manifest from jar : /opt/sonarqube/extensions/plugins/sonar-swift-plugin-1.6.1.jar
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:628)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:187)
at org.sonar.server.platform.platformlevel.PlatformLevel.start(PlatformLevel.java:80)
at org.sonar.server.platform.platformlevel.PlatformLevel2.start(PlatformLevel2.java:105)
at org.sonar.server.platform.PlatformImpl.start(PlatformImpl.java:196)
at org.sonar.server.platform.PlatformImpl.startLevel2Container(PlatformImpl.java:169)
at org.sonar.server.platform.PlatformImpl.init(PlatformImpl.java:77)
at org.sonar.server.platform.web.PlatformServletContextListener.contextInitialized(PlatformServletContextListener.java:43)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4763)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5232)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1427)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1417)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.IllegalStateException: Unable to read plugin manifest from jar : /opt/sonarqube/extensions/plugins/sonar-swift-plugin-1.6.1.jar
at org.sonar.updatecenter.common.PluginManifest.(PluginManifest.java:125)
at org.sonar.server.plugins.ServerPluginInfo.create(ServerPluginInfo.java:37)
at org.sonar.server.plugins.PluginJarLoader.lambda$getExternalPluginsMetadata$5(PluginJarLoader.java:203)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at org.sonar.server.plugins.PluginJarLoader.loadPluginsFromDir(PluginJarLoader.java:233)
at org.sonar.server.plugins.PluginJarLoader.getExternalPluginsMetadata(PluginJarLoader.java:203)
at org.sonar.server.plugins.PluginJarLoader.loadPlugins(PluginJarLoader.java:94)
at org.sonar.server.plugins.ServerPluginManager.start(ServerPluginManager.java:64)
at org.sonar.core.platform.StartableBeanPostProcessor.postProcessBeforeInitialization(StartableBeanPostProcessor.java:33)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
... 24 common frames omitted
Caused by: java.util.zip.ZipException: zip END header not found
at java.base/java.util.zip.ZipFile$Source.zerror(ZipFile.java:1607)
at java.base/java.util.zip.ZipFile$Source.findEND(ZipFile.java:1497)
at java.base/java.util.zip.ZipFile$Source.initCEN(ZipFile.java:1504)
at java.base/java.util.zip.ZipFile$Source.(ZipFile.java:1308)
at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1271)
at java.base/java.util.zip.ZipFile$CleanableResource.(ZipFile.java:733)
at java.base/java.util.zip.ZipFile$CleanableResource.get(ZipFile.java:850)
at java.base/java.util.zip.ZipFile.(ZipFile.java:248)
at java.base/java.util.zip.ZipFile.(ZipFile.java:177)
at java.base/java.util.jar.JarFile.(JarFile.java:350)
at java.base/java.util.jar.JarFile.(JarFile.java:321)
at java.base/java.util.jar.JarFile.(JarFile.java:287)
at org.sonar.updatecenter.common.PluginManifest.(PluginManifest.java:120)
... 41 common frames omitted
2022.04.04 19:30:39 INFO web[][o.s.s.a.EmbeddedTomcat] HTTP connector enabled on port 9000
2022.04.04 19:30:39 INFO web[][o.s.p.ProcessEntryPoint] Hard stopping process

==> /opt/sonarqube/logs/es.log <==
2022.04.04 19:30:39 INFO es[][o.e.n.Node] stopping ...

==> /opt/sonarqube/logs/sonar.20220404.log <==
2022.04.04 19:30:39 INFO app[][o.s.a.SchedulerImpl] Process[Web Server] is stopped

==> /opt/sonarqube/logs/es.log <==
2022.04.04 19:30:39 INFO es[][o.e.n.Node] stopped
2022.04.04 19:30:39 INFO es[][o.e.n.Node] closing ...
2022.04.04 19:30:39 INFO es[][o.e.n.Node] closed

==> /opt/sonarqube/logs/sonar.20220404.log <==
2022.04.04 19:30:39 WARN app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [ElasticSearch]: 143
2022.04.04 19:30:39 INFO app[][o.s.a.SchedulerImpl] Process[ElasticSearch] is stopped
2022.04.04 19:30:39 INFO app[][o.s.a.SchedulerImpl] SonarQube is stopped
<-- Wrapper Stopped
--> Wrapper Started as Daemon
Launching a JVM...
Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
`

`run-sonar.sh` 脚本支持 infer

Feature Request

run-sonar.sh 脚本增加对 infer 工具的支持,现在支持 OCLint/Lizard/Swiftlint,缺少 Infer

Motivation Behind Feature

Feature Description

执行Infer的命令为

infer -- run [--skip-analysis-in-path path] --compilation-database compile_commands.json

compile_commands.json 是 xcpretty 对 xcodebuild 的 log 转化为的 json 文件内容。
--skip-analysis-in-path path 是需要过滤的目录,相对路径

Alternatives or Workarounds

已生成并配置了oclint.xml,但sonarqube上没有显示任何问题

Question Checklist

sonarqube版本8.4.1
我的sonar配置是
sonar.login=xxx
sonar.projectKey=ios_project
sonar.projectName=ios_project
sonar.language=objc
sonar.sourceEncoding=UTF-8
sonar.sources=ios_project/

sonar.swift.oclint.report=ios_project/sonar-reports/oclint.xml

Question Subject

已经通过oclint在sonar-report下生成oclint.xml了,并配置了sonar.swift.oclint.report=sonar-report/oclint.xml,从日志上看sonarqube是识别到了oclint.xml,但是sonarqube上并没有显示任何oclint.xml的问题

除此之外,日志中还包含大量的以下警告,不确定是不是这个原因导致
WARN: file not included in sonar

可否单独停用某项规则或调整以降低误报

Question Checklist

Question Subject

列举会出现误报情况(不只这两种)如下:

NSString *str = XXXXXXX; // 方法返回值
return str; // 提示 The value read from str was never initialized.
NSString *picUrl = picInfo.img; // 提示 The value written to &picUrl (type NSString*) is never used.
[cell.picImagView sd_setImageWithURL:[NSURL URLWithString:picUrl] placeholderImage:pImg];

感谢!

适配 8.9 LTS 版本

适配 8.9 LTS 版本

TODO List

  1. 更新 org.sonarsource.sslr-squid-bridge 版本,目前是 2.6.1 升级为 2.7.1.392

升级之后,org.sonar.squidbridge 模块下边的类都无法使用,影响范围较大,有以下内容会有影响

com.backelite.sonarqube.swift.lang.SwiftAstScanner
com.backelite.sonarqube.swift.lang.SwiftConfiguration
com.backelite.sonarqube.swift.lang.api.SwiftMetric
com.backelite.sonarqube.swift.SwiftSquidSensor
com.backelite.sonarqube.swift.lang.lexer.SwiftLexer

会显示以下报错

java.lang.NoSuchMethodError: 'org.sonar.api.server.rule.RulesDefinition$NewRule org.sonar.api.server.rule.RulesDefinition$NewRule.setDebtSubCharacteristic(java.lang.String)'
	at org.sonar.squidbridge.rules.SqaleXmlLoader.processRule(SqaleXmlLoader.java:124)
	at org.sonar.squidbridge.rules.SqaleXmlLoader.processSubChar(SqaleXmlLoader.java:92)
	at org.sonar.squidbridge.rules.SqaleXmlLoader.processRoot(SqaleXmlLoader.java:78)
	at org.sonar.squidbridge.rules.SqaleXmlLoader.loadXmlResource(SqaleXmlLoader.java:65)
	at org.sonar.squidbridge.rules.SqaleXmlLoader.load(SqaleXmlLoader.java:52)
	at com.backelite.sonarqube.swift.issues.swiftlint.SwiftLintRulesDefinition.define(SwiftLintRulesDefinition.java:61)
	at org.sonar.server.rule.RuleDefinitionsLoader.load(RuleDefinitionsLoader.java:53)
	at org.sonar.server.rule.RegisterRules.start(RegisterRules.java:119)
	at org.sonar.core.platform.StartableCloseableSafeLifecyleStrategy.start(StartableCloseableSafeLifecyleStrategy.java:40)
	at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.start(AbstractInjectionFactory.java:84)
	at org.picocontainer.behaviors.AbstractBehavior.start(AbstractBehavior.java:169)
	at org.picocontainer.behaviors.Stored$RealComponentLifecycle.start(Stored.java:132)
	at org.picocontainer.behaviors.Stored.start(Stored.java:110)
	at org.picocontainer.DefaultPicoContainer.potentiallyStartAdapter(DefaultPicoContainer.java:1016)
	at org.picocontainer.DefaultPicoContainer.startAdapters(DefaultPicoContainer.java:1009)
	at org.picocontainer.DefaultPicoContainer.start(DefaultPicoContainer.java:767)
	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
	at org.sonar.server.platform.platformlevel.PlatformLevel.start(PlatformLevel.java:90)
	at org.sonar.server.platform.platformlevel.PlatformLevelStartup.access$001(PlatformLevelStartup.java:51)
	at org.sonar.server.platform.platformlevel.PlatformLevelStartup$1.doPrivileged(PlatformLevelStartup.java:119)
	at org.sonar.server.user.DoPrivileged.execute(DoPrivileged.java:45)
	at org.sonar.server.platform.platformlevel.PlatformLevelStartup.start(PlatformLevelStartup.java:116)
	at org.sonar.server.platform.PlatformImpl.executeStartupTasks(PlatformImpl.java:198)
	at org.sonar.server.platform.PlatformImpl$1.lambda$doRun$1(PlatformImpl.java:122)
	at org.sonar.server.platform.PlatformImpl$AutoStarterRunnable.runIfNotAborted(PlatformImpl.java:370)
	at org.sonar.server.platform.PlatformImpl$1.doRun(PlatformImpl.java:122)
	at org.sonar.server.platform.PlatformImpl$AutoStarterRunnable.run(PlatformImpl.java:354)
	at java.base/java.lang.Thread.run(Thread.java:829)

圈复杂度lizard.report无法正常解析。

环境:

1、sonarqube-9.8.0.63668 【社区版】
2、sonar-scanner-5.0.1.3006-macosx
3、sonar-swift-plugin-1.8.0
4、java -version
java version "17.0.10" 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 17.0.10+11-LTS-240)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.10+11-LTS-240, mixed mode, sharing)
5、Mac mini、Apple M1

执行命令:

pythonInstallPath="/Users/mieco/Library/Python/3.9"
lizardPth=$pythonInstallPath/lib/python/site-packages/lizard.py
echo lizardPth=$lizardPth

python3 $lizardPth --xml > ./lizard-report.xml

在命令后添加 -Dsonar.swift.lizard.report=lizard-report.xml

sonar-scanner
-Dsonar.projectKey=MicoApps-Sonar-test
-Dsonar.sources=.
-Dsonar.host.url=http://10.189.132.65:9000
-Dsonar.branch.name=${branchName}
-Dsonar.swift.swiftlint.report=swiftlint.txt
-Dsonar.swift.infer.report=infer-out/report.json
-Dsonar.swift.oclint.report=oclint_report.xml
-Dsonar.swift.lizard.report=lizard-report.xml

Issue Description

NFO: Sensor Swift Squid [swift] (done) | time=1768ms
INFO: Sensor Objective-C Squid [swift]
INFO: Sensor Objective-C Squid [swift] (done) | time=2982ms
INFO: Sensor Cobertura [swift]
INFO: Sensor Cobertura [swift] (done) | time=6ms
INFO: Sensor Lizard [swift]
INFO: Processing complexity report: /Users/xxx/xxx/lizard-report.xml
WARN: file not included in sonar ./xxx/Frameworks/AlipaySDK.bundle/bridge.js
INFO: ------------------------------------------------------------------------
INFO: EXECUTION FAILURE
INFO: ------------------------------------------------------------------------
INFO: Total time: 3:16.935s
INFO: Final Memory: 20M/108M
INFO: ------------------------------------------------------------------------
ERROR: Error during SonarScanner execution
java.lang.UnsupportedOperationException: Can not add the same measure twice on xxx/imageListen.js: DefaultMeasure[component=MISoundBox/imageListen.js,metric=Metric[uuid=,key=complexity,description=Cyclomatic complexity,type=INT,direction=-1,domain=Complexity,name=Cyclomatic Complexity,qualitative=false,userManaged=false,enabled=true,worstValue=,bestValue=,optimizedBestValue=false,hidden=false,deleteHistoricalData=false,decimalScale=],value=3,fromCore=false,storage=org.sonar.scanner.sensor.DefaultSensorStorage@4d071e4b,saved=false]
at org.sonar.scanner.sensor.DefaultSensorStorage.saveMeasure(DefaultSensorStorage.java:175)
at org.sonar.scanner.sensor.DefaultSensorStorage.store(DefaultSensorStorage.java:135)
at org.sonar.api.batch.sensor.measure.internal.DefaultMeasure.doSave(DefaultMeasure.java:96)
at org.sonar.api.batch.sensor.internal.DefaultStorable.save(DefaultStorable.java:45)
at com.backelite.sonarqube.swift.complexity.LizardReportParser.addComplexityFileMeasures(LizardReportParser.java:185)
at com.backelite.sonarqube.swift.complexity.LizardReportParser.parseMeasure(LizardReportParser.java:122)
at com.backelite.sonarqube.swift.complexity.LizardReportParser.parseFile(LizardReportParser.java:90)
at com.backelite.sonarqube.swift.complexity.LizardReportParser.parseReport(LizardReportParser.java:70)
at com.backelite.sonarqube.swift.complexity.LizardSensor.execute(LizardSensor.java:67)
at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse(AbstractSensorWrapper.java:64)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:88)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.lambda$execute$1(ModuleSensorsExecutor.java:61)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.withModuleStrategy(ModuleSensorsExecutor.java:79)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:61)
at org.sonar.scanner.scan.SpringModuleScanContainer.doAfterStart(SpringModuleScanContainer.java:82)
at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:188)
at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:167)
at org.sonar.scanner.scan.SpringProjectScanContainer.scan(SpringProjectScanContainer.java:401)
at org.sonar.scanner.scan.SpringProjectScanContainer.scanRecursively(SpringProjectScanContainer.java:397)
at org.sonar.scanner.scan.SpringProjectScanContainer.doAfterStart(SpringProjectScanContainer.java:366)
at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:188)
at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:167)
at org.sonar.scanner.bootstrap.SpringGlobalContainer.doAfterStart(SpringGlobalContainer.java:135)
at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:188)
at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:167)
at org.sonar.batch.bootstrapper.Batch.doExecute(Batch.java:72)
at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:66)
at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
at jdk.proxy1/jdk.proxy1.$Proxy0.execute(Unknown Source)
at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:189)
at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:138)
at org.sonarsource.scanner.cli.Main.execute(Main.java:126)
at org.sonarsource.scanner.cli.Main.execute(Main.java:81)
at org.sonarsource.scanner.cli.Main.main(Main.java:62)
ERROR:
ERROR: Re-run SonarScanner using the -X switch to enable full debug logging.

 [REPLACE THIS WITH YOUR INFORMATION] 

添加插件后不光Swift,其他语言的项目源码也无法分析,是我哪里配置错了吗?

报错信息如下:
ERROR: Error during SonarScanner execution
java.lang.IllegalStateException: Unable to load components interface org.sonar.api.batch.sensor.Sensor


Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ClassRealm{swift}-com.backelite.sonarqube.commons.surefire.SurefireSensor': Resolution of declared constructors on bean Class [com.backelite.sonarqube.commons.surefire.SurefireSensor] from ClassLoader [ClassRealm{swift}] failed; nested exception is java.lang.NoClassDefFoundError: org/sonar/api/component/ResourcePerspectives

Infer扫描结果同步到SonarQube,结果与本地不一致

hello,Mac端Infer扫描结果同步到SonarQube后,结果与本地不一致,比如【UNSAFE_CALL_TO_OPTIONAL_METHOD】错误类型就没有同步过去。
profile-infer.xml文件中也没有【UNSAFE_CALL_TO_OPTIONAL_METHOD】规则的配置。
麻烦帮忙看看是啥原因哈,谢谢~

Background initialization failed. Stopping SonarQube java.lang.NoSuchMethodError: 'org.sonar.api.server.rule.RulesDefinition$NewRule org.sonar.api.server.rule.RulesDefinition$NewRule.setDebtSubCharacteristic(java.lang.String)'

After upgrading sonarqube from version 8.9 to version 9.1, sonarqube server does not start with plugin.

Desktop:

OS: ubuntu
SonarQube 9.1 (build 47736)
sonar-cxx-plugin-2.0.5.2867.jar

 ERROR web[][o.s.s.p.Platform] Background initialization failed. Stopping SonarQube
java.lang.NoSuchMethodError: 'org.sonar.api.server.rule.RulesDefinition$NewRule org.sonar.api.server.rule.RulesDefinition$NewRule.setDebtSubCharacteristic(java.lang.String)'
        at org.sonar.squidbridge.rules.SqaleXmlLoader.processRule(SqaleXmlLoader.java:124)
        at org.sonar.squidbridge.rules.SqaleXmlLoader.processSubChar(SqaleXmlLoader.java:92)
        at org.sonar.squidbridge.rules.SqaleXmlLoader.processRoot(SqaleXmlLoader.java:78)
        at org.sonar.squidbridge.rules.SqaleXmlLoader.loadXmlResource(SqaleXmlLoader.java:65)
        at org.sonar.squidbridge.rules.SqaleXmlLoader.load(SqaleXmlLoader.java:52)
        at com.backelite.sonarqube.swift.issues.swiftlint.SwiftLintRulesDefinition.define(SwiftLintRulesDefinition.java:61)
        at org.sonar.server.rule.RuleDefinitionsLoader.load(RuleDefinitionsLoader.java:53)
        at org.sonar.server.rule.RegisterRules.start(RegisterRules.java:119)
        at org.sonar.core.platform.StartableCloseableSafeLifecyleStrategy.start(StartableCloseableSafeLifecyleStrategy.java:40)
        at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.start(AbstractInjectionFactory.java:84)
        at org.picocontainer.behaviors.AbstractBehavior.start(AbstractBehavior.java:169)
        at org.picocontainer.behaviors.Stored$RealComponentLifecycle.start(Stored.java:132)
        at org.picocontainer.behaviors.Stored.start(Stored.java:110)
        at org.picocontainer.DefaultPicoContainer.potentiallyStartAdapter(DefaultPicoContainer.java:1016)
        at org.picocontainer.DefaultPicoContainer.startAdapters(DefaultPicoContainer.java:1009)
        at org.picocontainer.DefaultPicoContainer.start(DefaultPicoContainer.java:767)
        at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
        at org.sonar.server.platform.platformlevel.PlatformLevel.start(PlatformLevel.java:90)
        at org.sonar.server.platform.platformlevel.PlatformLevelStartup.access$001(PlatformLevelStartup.java:51)
        at org.sonar.server.platform.platformlevel.PlatformLevelStartup$1.doPrivileged(PlatformLevelStartup.java:119)
        at org.sonar.server.user.DoPrivileged.execute(DoPrivileged.java:45)
        at org.sonar.server.platform.platformlevel.PlatformLevelStartup.start(PlatformLevelStartup.java:116)
        at org.sonar.server.platform.PlatformImpl.executeStartupTasks(PlatformImpl.java:198)
        at org.sonar.server.platform.PlatformImpl$1.lambda$doRun$1(PlatformImpl.java:122)
        at org.sonar.server.platform.PlatformImpl$AutoStarterRunnable.runIfNotAborted(PlatformImpl.java:370)
        at org.sonar.server.platform.PlatformImpl$1.doRun(PlatformImpl.java:122)
        at org.sonar.server.platform.PlatformImpl$AutoStarterRunnable.run(PlatformImpl.java:354)
        at java.base/java.lang.Thread.run(Thread.java:829)
2021.09.22 06:14:20 INFO  web[][o.s.p.ProcessEntryPoint] Hard stopping process
2021.09.22 06:14:20 INFO  web[][o.s.s.n.NotificationDaemon] Notification service stopped

不使用infer, 只使用swiftlint和oclint, sonarqube上面显示了oc的结果, 但没有显示swift的结果

现象:

  1. 如题

环境:

  1. 使用了1.6.0和1.6.1版本插件;

  2. 工程下sonar-project.properties 内容如下:

sonar.projectKey=Douyin
sonar.projectName=Douyin
sonar.objectivec.project=Douyin.xcodeproj
sonar.objectivec.workspace=Douyin.xcworkspace
sonar.objectivec.simulator=platform=iOS Simulator,name=iPhone 12 mini,OS=latest
sonar.objectivec.appScheme=Douyin
sonar.language=ObjC
sonar.sources=Douyin
sonar.sourceEncoding=UTF-8
sonar.objectivec.oclint.report=sonar-reports/*oclint.xml
sonar.swift.swiftlint.report=sonar-reports/*swiftlint.txt
sonar.host.url=http://localhost:9090
sonar.login=4801e8054c3eed95d5914057b6a75be964851bff
# sh -x run-sonar.sh -v -nounittests -usesonarscanner -nofauxpas

  1. 修改了run-sonar.sh文件, 会执行swiftlint
  2. 工程下的.swiftlint.yml 设置了reporter: "sonarqube"
  3. 运行完后有生成对应的oclint.xml文件和swiftlint.txt文件
  4. sonar-scanner执行成功, 日志如下:

+ sonar-scanner
INFO: Scanner configuration file: /usr/local/Cellar/sonar-scanner/4.7.0.2747/libexec/conf/sonar-scanner.properties
INFO: Project root configuration file: /Users/Project/mobile/douyin-ios-objectc/sonar-project.properties
INFO: SonarScanner 4.7.0.2747
INFO: Java 11.0.12 Homebrew (64-bit)
INFO: Mac OS X 12.2.1 x86_64
INFO: User cache: /Users/.sonar/cache
INFO: Scanner configuration file: /usr/local/Cellar/sonar-scanner/4.7.0.2747/libexec/conf/sonar-scanner.properties
INFO: Project root configuration file: /Users/Project/mobile/douyin-ios-objectc/sonar-project.properties
INFO: Analyzing on SonarQube server 8.9.7
INFO: Default locale: "zh_CN_#Hans", source code encoding: "UTF-8"
INFO: Load global settings
INFO: Load global settings (done) | time=125ms
INFO: Server id: BF41A1F2-AX-qLdTue6_SkrNxznMH
INFO: User cache: /Users/.sonar/cache
INFO: Load/download plugins
INFO: Load plugins index
INFO: Load plugins index (done) | time=80ms
INFO: Load/download plugins (done) | time=344ms
INFO: Process project properties
INFO: Process project properties (done) | time=9ms
INFO: Execute project builders
INFO: Execute project builders (done) | time=1ms
INFO: Project key: Douyin
INFO: Base dir: /Users/Project/mobile/douyin-ios-objectc
INFO: Working dir: /Users/Project/mobile/douyin-ios-objectc/.scannerwork
INFO: Load project settings for component key: 'Douyin'
INFO: Load project settings for component key: 'Douyin' (done) | time=31ms
INFO: Load quality profiles
INFO: Load quality profiles (done) | time=101ms
INFO: Load active rules
INFO: Load active rules (done) | time=2051ms
INFO: Indexing files...
INFO: Project configuration:
INFO: 672 files indexed
INFO: Quality profile for objc: OCLint
INFO: Quality profile for swift: SwiftLint
INFO: ------------- Run sensors on module Douyin
INFO: Load metrics repository
INFO: Load metrics repository (done) | time=29ms
INFO: Sensor CSS Rules [cssfamily]
INFO: No CSS, PHP, HTML or VueJS files are found in the project. CSS analysis is skipped.
INFO: Sensor CSS Rules [cssfamily] (done) | time=2ms
INFO: Sensor JaCoCo XML Report Importer [jacoco]
INFO: 'sonar.coverage.jacoco.xmlReportPaths' is not defined. Using default locations: target/site/jacoco/jacoco.xml,target/site/jacoco-it/jacoco.xml,build/reports/jacoco/test/jacocoTestReport.xml
INFO: No report imported, no coverage information will be imported by JaCoCo XML Report Importer
INFO: Sensor JaCoCo XML Report Importer [jacoco] (done) | time=6ms
INFO: Sensor C# Project Type Information [csharp]
INFO: Sensor C# Project Type Information [csharp] (done) | time=2ms
INFO: Sensor C# Properties [csharp]
INFO: Sensor C# Properties [csharp] (done) | time=0ms
INFO: Sensor JavaXmlSensor [java]
INFO: Sensor JavaXmlSensor [java] (done) | time=8ms
INFO: Sensor HTML [web]
INFO: Sensor HTML [web] (done) | time=6ms
INFO: Sensor VB.NET Project Type Information [vbnet]
INFO: Sensor VB.NET Project Type Information [vbnet] (done) | time=0ms
INFO: Sensor VB.NET Properties [vbnet]
INFO: Sensor VB.NET Properties [vbnet] (done) | time=0ms
INFO: Sensor SwiftLint [swift]
INFO: Processing SwiftLint report sonar-reports/Douyin-swiftlint.txt
INFO: Sensor SwiftLint [swift] (done) | time=54ms
INFO: Sensor Tailor [swift]
INFO: Sensor Tailor [swift] (done) | time=1ms
INFO: Sensor OCLint [swift]
INFO: Processing OCLint report sonar-reports/Douyin-oclint.xml
INFO: Load project repositories
INFO: Load project repositories (done) | time=34ms
INFO: Sensor OCLint [swift] (done) | time=859ms
INFO: Sensor Infer [swift]
INFO: Sensor Infer [swift] (done) | time=0ms
INFO: Sensor FauxPas [swift]
INFO: Sensor FauxPas [swift] (done) | time=1ms
INFO: Sensor Swift Squid [swift]
WARN: Metric 'lines' is an internal metric computed by SonarQube/SonarCloud. Provided value is ignored.
INFO: Sensor Swift Squid [swift] (done) | time=69ms
INFO: Sensor Objective-C Squid [swift]
INFO: Sensor Objective-C Squid [swift] (done) | time=442ms
INFO: Sensor Surefire [swift]
INFO: Processing Surefire report TEST-report.xml
INFO: Sensor Surefire [swift] (done) | time=70ms
INFO: Sensor Cobertura [swift]
INFO: Processing Cobertura report sonar-reports/coverage.xml
INFO: Sensor Cobertura [swift] (done) | time=702ms
INFO: Sensor Lizard [swift]
INFO: Processing complexity report: /Users/Project/mobile/douyin-ios-objectc/sonar-reports/lizard-report.xml
INFO: Sensor Lizard [swift] (done) | time=242ms
INFO: ------------- Run sensors on project
INFO: Sensor Dependency-Check [dependencycheck]
INFO: Process Dependency-Check report
INFO: Using JSON-Reportparser
INFO: Dependency-Check JSON report does not exists. Please check property sonar.dependencyCheck.jsonReportPath:/Users/Project/mobile/douyin-ios-objectc/${WORKSPACE}/dependency-check-report.json
INFO: JSON-Analysis skipped/aborted due to missing report file
INFO: Using XML-Reportparser
INFO: Dependency-Check XML report does not exists. Please check property sonar.dependencyCheck.xmlReportPath:/Users/Project/mobile/douyin-ios-objectc/${WORKSPACE}/dependency-check-report.xml
INFO: XML-Analysis skipped/aborted due to missing report file
INFO: Dependency-Check HTML report does not exists. Please check property sonar.dependencyCheck.htmlReportPath:/Users/Project/mobile/douyin-ios-objectc/${WORKSPACE}/dependency-check-report.html
INFO: HTML-Dependency-Check report does not exist.
INFO: Process Dependency-Check report (done) | time=4ms
INFO: Sensor Dependency-Check [dependencycheck] (done) | time=4ms
INFO: Sensor Zero Coverage Sensor
INFO: Sensor Zero Coverage Sensor (done) | time=8ms
INFO: SCM Publisher is disabled
INFO: CPD Executor 26 files had no CPD blocks
INFO: CPD Executor Calculating CPD for 55 files
INFO: CPD Executor CPD calculation finished (done) | time=54ms
INFO: Analysis report generated in 160ms, dir size=589 KB
INFO: Analysis report compressed in 349ms, zip size=241 KB
INFO: Analysis report uploaded in 51ms
INFO: ANALYSIS SUCCESSFUL, you can browse http://localhost:9090/dashboard?id=Douyin
INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
INFO: More about the report processing at http://localhost:9090/api/ce/task?id=AX-xE2CDRl4vUnR3evP4
INFO: Analysis total time: 7.670 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 9.530s
INFO: Final Memory: 7M/30M
INFO: --


  1. sonarqube上只有oc相关的结果, 没有swift的
  2. 用这个工程做的代码扫描: https://github.com/sshiqiao/douyin-ios-objectc, 在里面加了swift代码

WARN: file not included in sonar /Users/Shared/work

截屏2022-02-17 上午11 17 53

您好,当工程中有Pods文件时会报如图的警告 WARN: file not included in sonar /Users/Shared/work

sonarqube里也没有任何bug和异味,组件化后,我们的代码都在pods里,这个怎么解决呢?

file matches patterns error

Question Checklist

Question Subject

您好!当我同时使用Sonar C插件和Sonar OBJC插件时,对于C项目扫描失败,报错日志如下:

11:34:54.046 ERROR: Error during SonarScanner execution
Language of file 'src\tools\gddsEmuForEdgk\gddsZLib.h' can not be decided as the file matches patterns of both sonar.lang.patterns.objc : /*.h,/.m,**/.mm and sonar.lang.patterns.c : /*.c,/*.h

插件清单

compatible 10.4 version

Feature Request

Motivation Behind Feature

Feature Description

Alternatives or Workarounds

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.