标签: static-analysis

Go语言的静态代码分析(linter)工具

是否有去语般的静态分析工具lint,pylint等等?据我搜索,我没有找到任何相关的东西.

我可以在我所在部门担任本科高级项目.我必须确定以前没有这样做过.任何帮助表示赞赏.

static-analysis go

21
推荐指数
5
解决办法
1万
查看次数

确定"未知的评估顺序"

从版本1.80开始,Cppcheck告诉我

表达式'msg [ipos ++] =校验和(&msg [1],ipos-1)'取决于副作用的评估顺序

在这个代码序列中(简化,data是一个变量)

BYTE msg[MAX_MSG_SIZE];  // msg can be smaller, depending on data encoded
int ipos = 0;
msg[ipos++] = MSG_START;
ipos += encode(&msg[ipos], data);
msg[ipos++] = checksum(&msg[1], ipos-1);  // <---- Undefined Behaviour?
msg[ipos++] = MSG_END;   // increment ipos to the actual size of msg
Run Code Online (Sandbox Code Playgroud)

并将此视为错误,而不是可移植性问题.

它是C代码(包含在C++主导的项目中),使用C++ 98兼容编译器编译,同时按预期运行数十年.Cppcheck使用C++ 03,C89,自动检测语言运行.

我承认代码应该更好地重写.但在此之前,我试图弄清楚:它真的依赖于评估顺序吗?根据我的理解,正在首先评估正确的操作数(它需要在调用之前),然后msg[ipos]使用ipos最后完成的增量进行赋值(to ).

我错了这个假设,还是只是假阳性?

c c++ static-analysis operator-precedence cppcheck

21
推荐指数
2
解决办法
1411
查看次数

Maven插件分析javascript代码质量

Javascript代码很难维护.
我正在寻找能够帮助我确保合理质量水平的工具.
到目前为止,我已经找到了JsUNit,一个非常好的javascript单元测试框架.可以在任何可用的浏览器上从ant自动运行测试.
我还没有找到一些相当于PMD,checkstyle,Findbug的javascript ...

你知道javascript的静态代码分析工具吗?

javascript maven-2 static-analysis jslint

20
推荐指数
4
解决办法
1万
查看次数

用于根据PEP257自动检查文档字符串样式的工具

pep8这样的工具可以查看源代码样式,但是它们不会根据pep257,pep287来检查docstrings是否已经过滤.有这样的工具吗?

更新

我决定自己实现这样一个静态分析工具,请参阅:

https://github.com/GreenSteam/pep257

现在,大多数pep257都被覆盖了.设计受到提到的pep8工具的严重影响.

python static-analysis docstring pep8 pep

20
推荐指数
1
解决办法
2727
查看次数

使用gcc在C语言中键入varargs

很多时候我想要一个函数来接收可变数量的参数,例如以NULL结尾

#define push(stack_t stack, ...) _push(__VARARG__, NULL);
func _push(stack_t stack, char *s, ...) {
    va_list args;
    va_start(args, s);
    while (s = va_arg(args, char*)) push_single(stack, s);
}
Run Code Online (Sandbox Code Playgroud)

如果foo收到非char*变量,我可以指示gcc或clang发出警告吗?类似的东西__attribute__(format),但是对于同一指针类型的多个参数.

c gcc static-analysis c89

20
推荐指数
1
解决办法
1373
查看次数

如何使用布尔参数为按位运算符启用C++警告

在Linux上使用相当大的C++代码库和GCC工具链时,我遇到了执行布尔检查的代码,如下所示:

#include <stdio.h>

int main() {
   bool foo = true;

   if (~foo) {
     // do some expensive operation
     printf("This can be bad...\n");
   }
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

这看起来像一个明显的错误,因为~运算符在C++中表示逐位NOT,而不是逻辑NOT,就像在MATLAB中那样.上面的代码总是评估为true

幸运的是,这个错误造成的问题不是很重要(这只是一个小小的性能损失),但它让我想到如何在这么多时间内找不到这个错误.

由于逐位运算符触发从布尔值到整数的隐式转换(这是一个促销),因此它本身没有任何问题.然而,对我而言,似乎至少clang-tidy应该能够将其视为逻辑错误,因为很明显,在大多数情况下,意图不是对bool应用逐位操作,而是而是一个逻辑的.

g++即使-Wall -Wextra -Wconversion启用也似乎并不关心这个问题,这是明智的,因为正如我之前提到的,这不符合标准.(我甚至试过g++6.3,它应该有很多新的检查,但仍然没有任何结果

使用clang-tidy所有启用的检查(真的很快就会变得嘈杂)会警告隐式转换本身("隐式转换bool - >'int'"),但似乎没有与应用bit-相关的特定警告聪明的操作员到布尔.

以不同的方式编写if语句if(~foo == true),虽然详细并导致始终为false的情况,但确实会导致更有意义的错误,从而引起注意,但是在使用terser if(~foo)表单时不会发生这种情况.

是否有任何方法/工具来检查这些问题,这些问题是100%正确的C++,但很可能是错误?

c++ static-analysis bit-manipulation

20
推荐指数
1
解决办法
1525
查看次数


Coffeescript Static Analysis/Static Typechecking - Roadblocks

我认为Coffeescript是一种很棒的语言!我正在寻找一些将静态分析添加到Coffeescript的项目/问题/功能.然而,经过一些搜索,我发现Coffeescript 常见问题解答和此页面表明静态分析可能不可行.

我想知道如果在Coffeescript中实现静态分析/静态类型检查存在根本问题,那么编译器中是否存在这种类型的东西?

此外,对于非平凡的检查,这是不可能的,但可能仅适用于直接分析?当我说直截了当时,我的意思是检查一些微不足道的东西,比如,用户是否使用相同的名称(在类中)或顶层(或者在相关的.coffee文件集合中的顶层)定义了两次函数.

如果有人能指出一些示例,说明为什么实施静态分析/类型检查不简单/可能/值得花时间,我将不胜感激?

非常感谢你!

javascript programming-languages static-analysis coffeescript

19
推荐指数
2
解决办法
3223
查看次数

禁用实体,DTO包上的声纳重复

有没有办法禁用Sonar中选定软件包的某些指标?我使用Sonar来分析我的项目,在Entity和DTO包中我有一些相同的代码 - 带有注释的相同字段ID等被Sonar报告为重复.它绝对没有意义,所以我想禁用它.我怎样才能做到这一点?使用全局排除选项会禁用所选包上的所有指标,但如何仅为代码重复执行此操作?

java static-analysis sonarqube

19
推荐指数
2
解决办法
2万
查看次数

挖泥功能错误 - R包MuMln

我必须对数据集进行统计分析.我想创建所有可能的模型并使用挖泥功能测试它们但它不起作用.的确,当我输入:

glm1<-glm(presabs~dca1+dca2+se1+se2, family=binomial(logit))
dredge(glm1)
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

Erreur in dredge(glm1) : 
'global.model''s 'na.action' argument is not set and options('na.action') is "na.omit"
Run Code Online (Sandbox Code Playgroud)

有人能帮我吗?

statistics static-analysis r

19
推荐指数
2
解决办法
2万
查看次数