以下代码生成两个CA2000警告(除此之外,但这不是重点).
public sealed class Item: IDisposable
{
public void Dispose() {}
}
public sealed class ItemContainer
{
public void Add(Item item)
{
}
}
public sealed class Test: IDisposable
{
private ICollection<Item> itemCollection;
private ItemContainer itemContainer;
private void Add(Item item)
{
itemCollection.Add(item);
}
public void Initialize()
{
var item1 = new Item(); // no warning
itemCollection.Add(item1);
var item2 = new Item(); // CA2000: call Dispose on object item2
Add(item2);
var item3 = new Item(); // CA2000: call Dispose on object …Run Code Online (Sandbox Code Playgroud) 有没有适用于Android的静态代码分析工具,可以通过尝试访问可能为null的对象来获取NullPointerExceptions等简单的东西(不先检查它)...
像C#项目上的resharper这样的工具做得很好,所以我假设Android的Java有类似的工具......
您使用哪些工具来确定代码的效率?您是否使用运行统计上大量测试的本土应用程序或某些商业产品?您是否使用自己的知识来测试代码的某些区域,或者使用某种工具来分析代码中的弱点?
我的背景是C和C++.我非常喜欢Python,但是当你习惯于编译语言时,它的一个方面(以及我猜的其他解释语言)真的很难用.
当我用Python编写一些内容并且可以运行它时,仍然无法保证不会出现特定于语言的错误.对我而言,这意味着我不能完全依赖我的运行时防御(严格测试输入,断言等)以避免崩溃,因为在6个月内,当一些其他好的代码最终运行时,它可能会因为一些愚蠢的错误而破解.
显然,系统应该经过足够的测试,以确保所有代码都已运行,但大部分时间我都使用Python作为内部脚本和小工具,这些内容永远不会得到他们所需的QA关注.此外,一些代码非常简单(如果您的背景是C/C++),您知道只要编译它就会正常工作(例如,类中的getter-methods,通常是成员变量的简单返回).
所以,我的问题是显而易见的 - 有什么方法(使用特殊工具或其他东西)我可以确保我的Python脚本中的所有代码都将"编译"并运行?
我正在尝试为大约500个matlab src文件创建一个函数调用图.我无法找到任何可以帮助我对多个src文件执行相同操作的工具.
有人熟悉任何工具或插件吗?
如果没有任何此类工具,欢迎任何有关阅读6000行matlab代码而无需文档的建议.
我有一个工厂方法来构建实现的对象IDisposable.最终,调用者可以管理创建对象的生命周期.这种设计引发了一堆CA2000错误.在我的设计中是否存在根本不正确的东西,是否需要重构,还是仅仅对静态代码分析警告过于兴奋?
工厂方法
public static DisposableType BuildTheDisposableType(string param1, int param2)
{
var theDisposable = new DisposableType();
// Do some work to setup theDisposable
return theDisposable
}
Run Code Online (Sandbox Code Playgroud)
来电者
using(var dt = FactoryClass.BuildTheDisposableType("data", 4))
{
// use dt
}
Run Code Online (Sandbox Code Playgroud) 我想在某些源上使用js美化但是没有办法检测它是什么类型的源.有没有办法,粗略与否,检测源是css,html,javascript还是没有?
看看他们的网站,他们看起来好像它会弄清楚它是否是html:
function looks_like_html(source) {
// <foo> - looks like html
// <!--\nalert('foo!');\n--> - doesn't look like html
var trimmed = source.replace(/^[ \t\n\r]+/, '');
var comment_mark = '<' + '!-' + '-';
return (trimmed && (trimmed.substring(0, 1) === '<' && trimmed.substring(0, 4) !== comment_mark));
}
Run Code Online (Sandbox Code Playgroud)
只需要看看它是css,javascript还是两者都没有.这是在node.js中运行的
所以这段代码需要告诉我它的JavaScript:
var foo = {
bar : 'baz'
};
Run Code Online (Sandbox Code Playgroud)
这段代码需要告诉我它的CSS:
.foo {
background : red;
}
Run Code Online (Sandbox Code Playgroud)
所以测试它的函数会返回类型:
function getSourceType(source) {
if (isJs) {
return 'js';
}
if (isHtml) {
return …Run Code Online (Sandbox Code Playgroud) 假设我列举了所有货币:
public enum CurrencyType
{
/// <summary>
/// United Arab Emirates dirham
/// </summary>
[EnumMember]
AED = 784,
/// <summary>
/// Afghan afghani
/// </summary>
[EnumMember]
AFN = 971,
/// <summary>
/// Albanian lek
/// </summary>
[EnumMember]
ALL = 008,
...
}
Run Code Online (Sandbox Code Playgroud)
VS 2015代码分析一直抱怨每个成员有100个违反CA1709的行为.
这本身就是一个有用的规则,我不想禁用它; 然而,在这个特定的情况下它并没有多大帮助,因为它CurrencyType是公共的,并且在很多其他项目中使用.
我可以压制这个消息; 然而,VS只允许我为每个成员压制它 - 这意味着我将拥有100 [SuppressMessage(...)]行,这将使代码混乱.
有没有办法抑制所有CurrencyType成员的所有CA1709 ,而不是为这个项目中的所有其他代码抑制它,而不必写100 [SuppressMessage(...)]?
有一个Scope参数SuppressMessageAttribute,但文档不清楚.我试过放两个
[SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", Scope = "type", Justification = "Currency codes are defined in ISO …Run Code Online (Sandbox Code Playgroud) 我希望能够快速了解我们有多少"复制和粘贴"编码,有很多工具可供C#/ Java检查这类事情.有没有这样的工具可以很好地与VB.NET一起使用?
(我已经看到了很多重复的代码,但希望得到一些数字来帮助我做出整理的情况)
进展更新.
我刚试过西安.
Clone Doctor不支持VB.NET(仅限C#和VB 6以及其他许多)
2010年10月:VB.net添加到CloneDR支持的语言
Visual Studio的Clone Detective仅支持C#
SolidSDD - 源代码复制检测器仅支持C,C++,C#和Java
DuplicateFinder是开源的,但看起来非常像Simian,例如它只适用于文本行
ConQAT - 持续质量评估工具包 似乎有一个适用于VB.NET的克隆检测器(尚未尝试过)
Gendarme有点像FXCop并且有一个AvoidCodeDuplicatedInSameClassRule规则,这看起来非常有前景,因为它避免了在文本级别工作的问题. 刚尝试过,它是迄今为止最好的解决方案,遗憾的是它不会搜索范围更广.
在声称这个问题是重复之前,请检查另一个问题是否适用于VB.NET,因为许多适用于C#的工具对VB.NET来说效果不佳.(但如果这个问题真的重复,我不会感到惊讶)
我正在开启旧项目的代码分析.大多数评论结果我都能理解,但 CA2000:在丢失范围之前处理对象很难做到.
例如,来自ASP.Net页面的此代码:
private void BuildTable()
{
HtmlTableRow tr = new HtmlTableRow();
HtmlTableCell td = new HtmlTableCell();
tr.Cells.Add(td);
// add some controls to 'td'
theTable.Rows.Insert(0, tr);
// 'theTable' is an HtmlTable control on the page
}
Run Code Online (Sandbox Code Playgroud)
提供CA消息:
CA2000:Microsoft.Reliability:在方法'BuildTable()'中,在对所有引用超出范围之前,在对象'tr'上调用System.IDisposable.Dispose.
CA2000:Microsoft.Reliability:在方法'BuildTable()'中,对象'td'未沿所有异常路径放置.在对对象'td'的所有引用都超出范围之前调用System.IDisposable.Dispose.(以及关于添加到'td'的控件的类似消息.)
我可以解决第二个问题:
private void BuildTable()
{
HtmlTableRow tr = new HtmlTableRow();
HtmlTableCell td = new HtmlTableCell();
try
{
tr.Cells.Add(td);
// add some controls to 'td'
td = null; // this line is only reached when there were no exceptions
}
finally …Run Code Online (Sandbox Code Playgroud) code-analysis ×10
c# ×3
.net ×2
android ×1
ca2000 ×1
call-graph ×1
css ×1
dependencies ×1
dispose ×1
fxcop ×1
html ×1
idisposable ×1
javascript ×1
matlab ×1
node.js ×1
parsing ×1
performance ×1
profiling ×1
python ×1
roslyn ×1
static ×1
vb.net ×1