"Be optimistic on external API" 选项有什么作用?
What does the "Be optimistic on external API" option do?
在代码合同的 "Static Checking" 选项中,有一个名为 "Be optimistic on external API" 的选项。我找不到有关此选项功能的任何文档。它如何影响分析器的行为?
似乎确实没有关于此选项的任何文档。浏览源代码会提供一些线索。在 Options.cs
这链接到一个布尔值 lowScoreForExternal
:
[OptionDescription("Be optimistic on external API?
We will assign proof obligations depending on that a low score")]
[DoNotHashInCache]
public bool lowScoreForExternal = true;
在 WarningScoresManager
中,这在初始化期间用于设置为外部程序集中的额外信息分配的分数。启用该选项后,如果引用与框架程序集不同的程序集,则应用相同的分数,否则应用非常高的惩罚。
private void InitializeDefaultValuesForContextsOfCalleeAssumeCanDischarge
(bool lowScoreForExternalAPI)
{
// ...
ScoreCalleeAssumeExtraInfoDeclaredInAFrameworkAssembly = .05;
ScoreCalleeAssumeExtraInfoDeclaredInADifferentAssembly = lowScoreForExternalAPI ?
ScoreCalleeAssumeExtraInfoDeclaredInAFrameworkAssembly : 100.0;
似乎使用此设置会强制分析器对外部程序集的代码质量采取与框架程序集相同的信任级别。
这似乎是此变量的唯一用途 - 它被传递给构造函数中的 WarningScoresManager
,未在其他任何地方使用。
在代码合同的 "Static Checking" 选项中,有一个名为 "Be optimistic on external API" 的选项。我找不到有关此选项功能的任何文档。它如何影响分析器的行为?
似乎确实没有关于此选项的任何文档。浏览源代码会提供一些线索。在 Options.cs
这链接到一个布尔值 lowScoreForExternal
:
[OptionDescription("Be optimistic on external API?
We will assign proof obligations depending on that a low score")]
[DoNotHashInCache]
public bool lowScoreForExternal = true;
在 WarningScoresManager
中,这在初始化期间用于设置为外部程序集中的额外信息分配的分数。启用该选项后,如果引用与框架程序集不同的程序集,则应用相同的分数,否则应用非常高的惩罚。
private void InitializeDefaultValuesForContextsOfCalleeAssumeCanDischarge
(bool lowScoreForExternalAPI)
{
// ...
ScoreCalleeAssumeExtraInfoDeclaredInAFrameworkAssembly = .05;
ScoreCalleeAssumeExtraInfoDeclaredInADifferentAssembly = lowScoreForExternalAPI ?
ScoreCalleeAssumeExtraInfoDeclaredInAFrameworkAssembly : 100.0;
似乎使用此设置会强制分析器对外部程序集的代码质量采取与框架程序集相同的信任级别。
这似乎是此变量的唯一用途 - 它被传递给构造函数中的 WarningScoresManager
,未在其他任何地方使用。