It is recommended to use the XClarify interactive UI capabilities
to make the most of XClarify by mastering all aspects of your code.
Diagrams
Application Metrics
Note: Further Application Statistics are available.
|
Rules summary
34100This section lists all Rules violated, and Rules or Queries with Error- Number of Rules or Queries with Error (syntax error, exception thrown, time-out): 0
- Number of Rules violated: 10
Summary of Rules violated
Name | # Matches | Elements | Group | |||
---|---|---|---|---|---|---|
| 1 | projects | Architecture and Layering | |||
| 15 | types | Dead Code | |||
| 149 | methods | Dead Code | |||
| 2 | fields | Dead Code | |||
| 49 | fields | Visibility | |||
| 10 | fields | Naming Conventions | |||
| 10 | fields | Naming Conventions | |||
| 5 | methods | Naming Conventions | |||
| 12 | fields | Naming Conventions | |||
| 16 | types | Source Files Organization |
Application Statistics
Stat | # Occurences | Avg | StdDev | Max |
---|---|---|---|---|
Public properties on classes | 37 Classes | 0 | 0 | 0 public properties on Keywords |
Public methods on classes | 37 classes | 4.22 | 3.5 | 14 public methods on ATZPackageTableCellView |
Arguments on public methods on classes | 156 methods | 0.85 | 0.99 | 4 arguments on ATZShell.executeCommand(NSString*,NSArray*,NSString*,void(^)(NSString*,NSError*)) |
Cyclomatic complexity on non abstract Methods | 160 Methods | 0 | 0 | CC = 0 for ATZColorScheme.installer() |
Projects Metrics
Clicking column header arrows sorts values.
Clicking column header title text redirect to the online Code Metric definition.
Projects | # lines of code | # Types | # Abstract Types | # lines of comment | % Comment | Afferent Coupling | Efferent Coupling | Relational Cohesion | Instability | Abstractness | Distance |
---|---|---|---|---|---|---|---|---|---|---|---|
Alcatraz v1.0.0.0 | 315 | 24 | 0 | 3 | 0 | 0 | 64 | 1 | 1 | 0 | 0 |
AlcatrazTests v1.0.0.0 | 190 | 18 | 0 | 2 | 1 | 0 | 44 | 1.33 | 1 | 0 | 0 |
Types Metrics : Code Quality
If you wish to define thresholds on types' Code Metrics, consider writing some Rule.
Clicking column header arrows sorts values.
Clicking column header title text redirect to the online Code Metric definition.
Type Name | Type Rank | # Lines Of Code | # Lines Of Comment | % Comment | Cyclomatic Complexity | Afferent Coupling | Efferent Coupling | Type Namespace | |||
---|---|---|---|---|---|---|---|---|---|---|---|
__Globals | 5.82 | 14 | 0 | 0 | 0 | 6 | 0 | - | 11 | 10 | |
__Globals | 5.82 | 0 | 0 | 0 | - | 0 | 0 | - | 11 | 0 | |
ATZTemplate | 1.64 | 5 | 0 | 0 | 0 | 5 | 0 | - | 3 | 4 | |
ATZTemplate | 1.64 | 5 | 0 | 0 | 0 | 5 | 0 | - | 3 | 4 | |
ATZTemplateInstaller | 1.02 | 25 | 1 | 0 | 0 | 9 | 0 | - | 2 | 18 | |
ATZTemplateInstaller | 1.02 | 25 | 1 | 0 | 0 | 9 | 0 | - | 2 | 18 | |
NSFileManager+Alcatraz | 0.65 | 13 | 0 | 0 | 0 | 2 | 0 | - | 3 | 5 | |
NSFileManager+Alcatraz | 0.65 | 6 | 0 | 0 | 0 | 2 | 0 | - | 3 | 5 | |
ATZColorScheme | 0.34 | 5 | 0 | 0 | 0 | 5 | 0 | - | 1 | 4 | |
ATZColorScheme | 0.34 | 5 | 0 | 0 | 0 | 5 | 0 | - | 1 | 4 | |
ATZPbxprojParser | 0.28 | 9 | 0 | 0 | 0 | 3 | 0 | - | 1 | 11 | |
ATZPlugin | 0.28 | 4 | 0 | 0 | 0 | 4 | 0 | - | 1 | 4 | |
ATZShell | 0.28 | 49 | 0 | 0 | 0 | 11 | 0 | - | 1 | 11 | |
ATZPlugin | 0.28 | 4 | 0 | 0 | 0 | 4 | 0 | - | 1 | 4 | |
ATZPbxprojParser | 0.28 | 9 | 0 | 0 | 0 | 3 | 0 | - | 1 | 11 | |
ATZShell | 0.28 | 28 | 0 | 0 | 0 | 11 | 0 | - | 1 | 11 | |
ATZAlcatrazPackage | 0.15 | 5 | 0 | 0 | 0 | 3 | 0 | - | 0 | 3 | |
ATZShell+AnonymousExtension | 0.15 | 0 | 0 | 0 | - | 0 | 0 | - | 0 | 0 | |
ATZProjectTemplate | 0.15 | 2 | 0 | 0 | 0 | 2 | 0 | - | 0 | 4 | |
ATZFileTemplate | 0.15 | 2 | 0 | 0 | 0 | 2 | 0 | - | 0 | 4 | |
ATZProjectTemplateInstaller | 0.15 | 2 | 0 | 0 | 0 | 2 | 0 | - | 0 | 6 | |
ATZFileTemplateInstaller | 0.15 | 2 | 0 | 0 | 0 | 2 | 0 | - | 0 | 6 | |
ATZPluginInstaller | 0.15 | 45 | 1 | 2 | 4.26 | 15 | 0 | - | 0 | 20 | |
ATZColorSchemeInstaller | 0.15 | 18 | 0 | 0 | 0 | 13 | 0 | - | 0 | 14 | |
ATZShell+AnonymousExtension | 0.15 | 0 | 0 | 0 | - | 0 | 0 | - | 0 | 0 | |
ATZProjectTemplateInstaller | 0.15 | 2 | 0 | 0 | 0 | 2 | 0 | - | 0 | 6 | |
ATZPluginInstaller | 0.15 | 52 | 1 | 2 | 3.7 | 15 | 0 | - | 0 | 20 | |
ATZFileTemplateInstaller | 0.15 | 2 | 0 | 0 | 0 | 2 | 0 | - | 0 | 6 | |
ATZColorSchemeInstaller | 0.15 | 33 | 0 | 0 | 0 | 15 | 0 | - | 0 | 14 | |
ATZProjectTemplate | 0.15 | 2 | 0 | 0 | 0 | 2 | 0 | - | 0 | 4 | |
ATZFileTemplate | 0.15 | 2 | 0 | 0 | 0 | 2 | 0 | - | 0 | 4 | |
ATZStatusView | 0.15 | 11 | 0 | 0 | 0 | 2 | 0 | - | 0 | 6 | |
ATZVersionLabel | 0.15 | 18 | 0 | 0 | 0 | 3 | 0 | - | 0 | 9 | |
ATZPackageTableCellView+AnonymousExtension | 0.15 | 0 | 0 | 0 | - | 0 | 0 | - | 0 | 0 | |
ATZPackageTableCellView | 0.15 | 30 | 0 | 0 | 0 | 24 | 0 | - | 0 | 13 | |
ATZAlcatrazPackage | 0.15 | 19 | 0 | 0 | 0 | 3 | 0 | - | 0 | 3 | |
ATZPackageCheckboxCell | 0.15 | 22 | 0 | 1 | 4.35 | 4 | 0 | - | 0 | 17 | |
ATZDetailItemButton | 0.15 | 8 | 0 | 0 | 0 | 5 | 0 | - | 0 | 11 | |
ATZProgressIndicator | 0.15 | 4 | 0 | 0 | 0 | 2 | 0 | - | 0 | 4 | |
ATZVersionLabel | 0.15 | 18 | 0 | 0 | 0 | 3 | 0 | - | 0 | 9 |
Types Metrics : Code Members and Inheritance
Type Name | # Instance Methods | Nb Static Methods | # Fields | # Children Classes | Depth Of Inheritance Tree | Type Namespace | |
---|---|---|---|---|---|---|---|
__Globals | 5 | 0 | 0 | 25 | 0 | 0 | |
__Globals | 0 | 0 | 0 | 24 | 0 | 0 | |
ATZTemplate | 5 | 0 | 0 | 0 | 2 | 2 | |
ATZTemplate | 5 | 0 | 0 | 0 | 2 | 2 | |
ATZTemplateInstaller | 6 | 0 | 0 | 0 | 2 | 2 | |
ATZTemplateInstaller | 6 | 0 | 0 | 0 | 2 | 2 | |
NSFileManager+Alcatraz | 2 | 0 | - | 0 | - | - | |
NSFileManager+Alcatraz | 2 | 0 | - | 0 | - | - | |
ATZColorScheme | 5 | 0 | 0 | 0 | 0 | 2 | |
ATZColorScheme | 5 | 0 | 0 | 0 | 0 | 2 | |
ATZPbxprojParser | 1 | 0 | 0 | 0 | 0 | 1 | |
ATZPlugin | 4 | 0 | 0 | 1 | 0 | 2 | |
ATZShell | 10 | 0 | 0 | 1 | 0 | 1 | |
ATZPlugin | 4 | 0 | 0 | 1 | 0 | 2 | |
ATZPbxprojParser | 1 | 0 | 0 | 0 | 0 | 1 | |
ATZShell | 10 | 0 | 0 | 1 | 0 | 1 | |
ATZAlcatrazPackage | 3 | 0 | 0 | 0 | 0 | 2 | |
ATZShell+AnonymousExtension | 0 | 0 | - | 1 | - | - | |
ATZProjectTemplate | 2 | 0 | 0 | 0 | 0 | 3 | |
ATZFileTemplate | 2 | 0 | 0 | 0 | 0 | 3 | |
ATZProjectTemplateInstaller | 2 | 0 | 0 | 0 | 0 | 3 | |
ATZFileTemplateInstaller | 2 | 0 | 0 | 0 | 0 | 3 | |
ATZPluginInstaller | 9 | 0 | 0 | 0 | 0 | 2 | |
ATZColorSchemeInstaller | 10 | 0 | 0 | 0 | 0 | 2 | |
ATZShell+AnonymousExtension | 0 | 0 | - | 1 | - | - | |
ATZProjectTemplateInstaller | 2 | 0 | 0 | 0 | 0 | 3 | |
ATZPluginInstaller | 9 | 0 | 0 | 0 | 0 | 2 | |
ATZFileTemplateInstaller | 2 | 0 | 0 | 0 | 0 | 3 | |
ATZColorSchemeInstaller | 10 | 0 | 0 | 0 | 0 | 2 | |
ATZProjectTemplate | 2 | 0 | 0 | 0 | 0 | 3 | |
ATZFileTemplate | 2 | 0 | 0 | 0 | 0 | 3 | |
ATZStatusView | 1 | 0 | 0 | 0 | 0 | 3 | |
ATZVersionLabel | 2 | 0 | 0 | 0 | 0 | 5 | |
ATZPackageTableCellView+AnonymousExtension | 0 | 0 | - | 1 | - | - | |
ATZPackageTableCellView | 14 | 0 | 0 | 3 | 0 | 4 | |
ATZAlcatrazPackage | 3 | 0 | 0 | 0 | 0 | 2 | |
ATZPackageCheckboxCell | 2 | 0 | 0 | 0 | 0 | 4 | |
ATZDetailItemButton | 5 | 0 | 0 | 0 | 0 | 5 | |
ATZProgressIndicator | 1 | 0 | 0 | 0 | 0 | 4 | |
ATZVersionLabel | 2 | 0 | 0 | 0 | 0 | 5 |
Types Metrics : Lack Of Cohesion Of Methods and Association Between Classes
Type Name | Lack Of Cohesion Of Methods | Lack Of Cohesion Of Methods HS | Association Between Classes | Type Namespace |
---|---|---|---|---|
__Globals | 0 | 0 | 21 | |
__Globals | 0 | 0 | 0 | |
ATZTemplate | 0 | 0 | 5 | |
ATZTemplate | 0 | 0 | 5 | |
ATZTemplateInstaller | 0 | 0 | 22 | |
ATZTemplateInstaller | 0 | 0 | 22 | |
NSFileManager+Alcatraz | 0 | 0 | 5 | |
NSFileManager+Alcatraz | 0 | 0 | 5 | |
ATZColorScheme | 0 | 0 | 4 | |
ATZColorScheme | 0 | 0 | 4 | |
ATZPbxprojParser | 0 | 0 | 13 | |
ATZPlugin | 1 | 1.33 | 4 | |
ATZShell | 1 | 1.12 | 21 | |
ATZPlugin | 1 | 1.33 | 4 | |
ATZPbxprojParser | 0 | 0 | 13 | |
ATZShell | 1 | 1.12 | 21 | |
ATZAlcatrazPackage | 0 | 0 | 4 | |
ATZShell+AnonymousExtension | 0 | 0 | 0 | |
ATZProjectTemplate | 0 | 0 | 2 | |
ATZFileTemplate | 0 | 0 | 2 | |
ATZProjectTemplateInstaller | 0 | 0 | 5 | |
ATZFileTemplateInstaller | 0 | 0 | 5 | |
ATZPluginInstaller | 0 | 0 | 41 | |
ATZColorSchemeInstaller | 0 | 0 | 20 | |
ATZShell+AnonymousExtension | 0 | 0 | 0 | |
ATZProjectTemplateInstaller | 0 | 0 | 5 | |
ATZPluginInstaller | 0 | 0 | 41 | |
ATZFileTemplateInstaller | 0 | 0 | 5 | |
ATZColorSchemeInstaller | 0 | 0 | 20 | |
ATZProjectTemplate | 0 | 0 | 2 | |
ATZFileTemplate | 0 | 0 | 2 | |
ATZStatusView | 0 | 0 | 15 | |
ATZVersionLabel | 0 | 0 | 23 | |
ATZPackageTableCellView+AnonymousExtension | 0 | 0 | 0 | |
ATZPackageTableCellView | 1 | 1.08 | 24 | |
ATZAlcatrazPackage | 0 | 0 | 4 | |
ATZPackageCheckboxCell | 0 | 0 | 26 | |
ATZDetailItemButton | 0 | 0 | 15 | |
ATZProgressIndicator | 0 | 0 | 3 | |
ATZVersionLabel | 0 | 0 | 23 |
Architecture and Layering | 110 |
|
Rule warning: Projects with poor cohesion (RelationalCohesion) |
warnif count > 0 from a in Application.Projects where
a.NbTypes > 20 && // Relational Cohesion metrics is relevant only if there are several types
(a.RelationalCohesion < 1.5 ||
a.RelationalCohesion > 4.0)
select new { a, a.NbTypes, a.RelationalCohesion }
// As classes inside an project should be strongly related,
// the cohesion should be high. On the other hand, a value
// which is too high may indicate over-coupling. A good range
// for RelationalCohesion is 1.5 to 4.0.
// See the definition of the RelationalCohesion metric here
// http://www.cppdepend.com/Metrics.aspx#RelationalCohesion
1 projects matched
project | # Types | Relational cohesion | Full Name |
---|---|---|---|
Alcatraz | 24 | 1 | Alcatraz |
Statistics
Stat | # Types | Relational cohesion |
---|---|---|
Sum: | 24 | 1 |
Average: | 24 | 1 |
Minimum: | 24 | 1 |
Maximum: | 24 | 1 |
Standard deviation: | 0 | 0 |
Variance: | 0 | 0 |
Dead Code | 030 |
|
Rule warning: Potentially dead Types |
warnif count > 0
let typesUsedByMethods=Types.UsedByAny(Application.Methods)
// Select types unused
let typesUnused =
from t in JustMyCode.Types where
t.NbTypesUsingMe == 0 select t
// Dead types = types used only by unused types (recursive)
let deadTypesMetric = typesUnused.FillIterative(
types => from t2 in codeBase.Application.Types.UsedByAny(types).Except(types)
where
t2.TypesUsingMe.Intersect(types).Count() == t2.NbTypesUsingMe
select t2)
from t3 in deadTypesMetric.DefinitionDomain where typesUsedByMethods.Contains(t3)
select new { t3, t3.TypesUsingMe, depth = deadTypesMetric[t3] }
15 types matched
types | TypesUsingMe | depth | Full Name |
---|---|---|---|
ATZColorSchemeInstaller | 0 type | 0 | ATZColorSchemeInstaller |
ATZPluginInstaller | 0 type | 0 | ATZPluginInstaller |
ATZDetailItemButton | 0 type | 0 | ATZDetailItemButton |
ATZPackageCheckboxCell | 0 type | 0 | ATZPackageCheckboxCell |
ATZPackageTableCellView | 0 type | 0 | ATZPackageTableCellView |
ATZVersionLabel | 0 type | 0 | ATZVersionLabel |
ATZColorSchemeInstaller | 0 type | 0 | ATZColorSchemeInstaller |
ATZPluginInstaller | 0 type | 0 | ATZPluginInstaller |
ATZVersionLabel | 0 type | 0 | ATZVersionLabel |
ATZTemplateInstaller | 2 types | 1 | ATZTemplateInstaller |
ATZShell | 1 type | 1 | ATZShell |
ATZPbxprojParser | 1 type | 1 | ATZPbxprojParser |
ATZTemplateInstaller | 2 types | 1 | ATZTemplateInstaller |
ATZShell | 1 type | 1 | ATZShell |
ATZPbxprojParser | 1 type | 1 | ATZPbxprojParser |
Statistics
Stat | TypesUsingMe | depth |
---|---|---|
Sum: | 0 | 6 |
Average: | 0 | 0.4 |
Minimum: | 0 | 0 |
Maximum: | 0 | 1 |
Standard deviation: | 0 | 0.49 |
Variance: | 0 | 0.24 |
Rule warning: Potentially dead Methods |
warnif count > 0
// Filter procedure for methods that should'nt be considered as dead
let canMethodBeConsideredAsDeadProc = new Func<IMethod, bool>(
m => !m.IsGeneratedByCompiler
)
// Get methods unused
let methodsUnused =
from m2 in JustMyCode.Methods where
m2.NbMethodsCallingMe == 0 &&
canMethodBeConsideredAsDeadProc(m2)
select m2
// Dead methods = methods used only by unused methods (recursive)
let deadMethodsMetric = methodsUnused.FillIterative(
methods => // Unique loop, just to let a chance to build the hashset.
from o in new[] { new object() }
// Use a hashet to make Intersect calls much faster!
let hashset = methods.ToHashSet()
from m3 in codeBase.Application.Methods.UsedByAny(methods).Except(methods)
where canMethodBeConsideredAsDeadProc(m3) &&
// Select methods called only by methods already considered as dead
hashset.Intersect(m3.MethodsCallingMe).Count() == m3.NbMethodsCallingMe
select m3)
from m4 in JustMyCode.Methods.Intersect(deadMethodsMetric.DefinitionDomain)
select new { m4, m4.MethodsCallingMe, depth = deadMethodsMetric[m4] }
149 methods matched
methods | MethodsCallingMe | depth | Full Name |
---|---|---|---|
installer() | 0 method | 0 | ATZColorScheme.installer() |
type() | 0 method | 0 | ATZColorScheme.type() |
requiresRestart() | 0 method | 0 | ATZColorScheme.requiresRestart() |
extension() | 0 method | 0 | ATZColorScheme.extension() |
iconName() | 0 method | 0 | ATZColorScheme.iconName() |
installer() | 0 method | 0 | ATZFileTemplate.installer() |
type() | 0 method | 0 | ATZFileTemplate.type() |
installer() | 0 method | 0 | ATZPlugin.installer() |
type() | 0 method | 0 | ATZPlugin.type() |
extension() | 0 method | 0 | ATZPlugin.extension() |
iconName() | 0 method | 0 | ATZPlugin.iconName() |
installer() | 0 method | 0 | ATZProjectTemplate.installer() |
type() | 0 method | 0 | ATZProjectTemplate.type() |
installer() | 0 method | 0 | ATZTemplate.installer() |
type() | 0 method | 0 | ATZTemplate.type() |
requiresRestart() | 0 method | 0 | ATZTemplate.requiresRestart() |
extension() | 0 method | 0 | ATZTemplate.extension() |
iconName() | 0 method | 0 | ATZTemplate.iconName() |
updateBlock2(NSData*,NSError*) | 0 method | 0 | ATZColorSchemeInstaller.updateBlock2(NSData*,NSError*) |
downloadPackage(ATZPackage*,void(^)(NSError*)) | 0 method | 0 | ATZColorSchemeInstaller.downloadPackage(ATZPackage*,void(^)(NSError*)) |
updatePackage(ATZPackage*,void(^)(NSString*,NSError*)) | 0 method | 0 | ATZColorSchemeInstaller.updatePackage(ATZPackage*,void(^)(NSString* ,NSError*)) |
installPackage(ATZColorScheme*,void(^)(NSError*)) | 0 method | 0 | ATZColorSchemeInstaller.installPackage(ATZColorScheme*,void(^) (NSError*)) |
downloadRelativePath() | 0 method | 0 | ATZColorSchemeInstaller.downloadRelativePath() |
pathForInstalledPackage(ATZPackage*) | 0 method | 0 | ATZColorSchemeInstaller.pathForInstalledPackage(ATZPackage*) |
saveColorScheme(ATZPackage*,NSData*,void(^)(NSError*)) | 1 method | 1 | ATZColorSchemeInstaller.saveColorScheme(ATZPackage*,NSData*,void(^) (NSError*)) |
copyColorSchemeToXcode(ATZPackage*,void(^)(NSError*)) | 1 method | 1 | ATZColorSchemeInstaller.copyColorSchemeToXcode(ATZPackage*,void(^) (NSError*)) |
createDownloadedColorsDirectoryIfNeeded() | 1 method | 1 | ATZColorSchemeInstaller.createDownloadedColorsDirectoryIfNeeded() |
createInstalledColorsDirectoryIfNeeded() | 1 method | 1 | ATZColorSchemeInstaller.createInstalledColorsDirectoryIfNeeded() |
installedColorSchemesPath() | 1 method | 2 | ATZColorSchemeInstaller.installedColorSchemesPath() |
downloadRelativePath() | 0 method | 0 | ATZFileTemplateInstaller.downloadRelativePath() |
pathForInstalledPackage(ATZPackage*) | 0 method | 0 | ATZFileTemplateInstaller.pathForInstalledPackage(ATZPackage*) |
downloadPackage(ATZPackage*,void(^)(NSError*)) | 0 method | 0 | ATZPluginInstaller.downloadPackage(ATZPackage*,void(^)(NSError*)) |
updatePackage(ATZPackage*,void(^)(NSString*,NSError*)) | 0 method | 0 | ATZPluginInstaller.updatePackage(ATZPackage*,void(^)(NSString* ,NSError*)) |
installPackage(ATZPlugin*,void(^)(NSError*)) | 0 method | 0 | ATZPluginInstaller.installPackage(ATZPlugin*,void(^)(NSError*)) |
downloadRelativePath() | 0 method | 0 | ATZPluginInstaller.downloadRelativePath() |
pathForInstalledPackage(ATZPackage*) | 0 method | 0 | ATZPluginInstaller.pathForInstalledPackage(ATZPackage*) |
reloadXcodeForPackage(ATZPackage*,void(^)(NSError*)) | 0 method | 0 | ATZPluginInstaller.reloadXcodeForPackage(ATZPackage*,void(^)(NSError*) ) |
buildPlugin(ATZPlugin*,void(^)(NSError*)) | 1 method | 1 | ATZPluginInstaller.buildPlugin(ATZPlugin*,void(^)(NSError*)) |
findXcodeprojPathForPlugin(ATZPlugin*) | 1 method | 2 | ATZPluginInstaller.findXcodeprojPathForPlugin(ATZPlugin*) |
installNameFromPbxproj(ATZPackage*) | 1 method | 1 | ATZPluginInstaller.installNameFromPbxproj(ATZPackage*) |
downloadRelativePath() | 0 method | 0 | ATZProjectTemplateInstaller.downloadRelativePath() |
pathForInstalledPackage(ATZPackage*) | 0 method | 0 | ATZProjectTemplateInstaller.pathForInstalledPackage(ATZPackage*) |
downloadPackage(ATZPackage*,void(^)(NSError*)) | 0 method | 0 | ATZTemplateInstaller.downloadPackage(ATZPackage*,void(^)(NSError*)) |
updatePackage(ATZPackage*,void(^)(NSString*,NSError*)) | 0 method | 0 | ATZTemplateInstaller.updatePackage(ATZPackage*,void(^)(NSString* ,NSError*)) |
installPackage(ATZTemplate*,void(^)(NSError*)) | 0 method | 0 | ATZTemplateInstaller.installPackage(ATZTemplate*,void(^)(NSError*)) |
copyTemplatesToXcode(ATZTemplate*,void(^)(NSError*)) | 1 method | 1 | ATZTemplateInstaller.copyTemplatesToXcode(ATZTemplate*,void(^) (NSError*)) |
createTemplateInstallDirectory(ATZTemplate*,NSError**) | 1 method | 2 | ATZTemplateInstaller.createTemplateInstallDirectory(ATZTemplate* ,NSError**) |
templateFilesForClonedTemplate(ATZTemplate*) | 1 method | 2 | ATZTemplateInstaller.templateFilesForClonedTemplate(ATZTemplate*) |
removeItemAtPath(NSString*,void(^)(NSError*)) | 0 method | 0 | NSFileManager+Alcatraz.removeItemAtPath(NSString*,void(^)(NSError*)) |
taskOutput() | 0 method | 0 | ATZShell.taskOutput() |
setTaskOutput(NSMutableData*) | 0 method | 0 | ATZShell.setTaskOutput(NSMutableData*) |
areCommandLineToolsAvailable() | 0 method | 0 | ATZShell.areCommandLineToolsAvailable() |
executeCommand(NSString*,NSArray*,void(^)(NSString*,NSError*)) | 1 method | 2 | ATZShell.executeCommand(NSString*,NSArray*,void(^)(NSString*,NSError*) ) |
executeCommand(NSString*,NSArray*,NSString*,void(^)(NSString*,NSError* )) | 1 method | 3 | ATZShell.executeCommand(NSString*,NSArray*,NSString*,void(^)(NSString* ,NSError*)) |
setUpShellOutputForTask(NSTask*) | 1 method | 4 | ATZShell.setUpShellOutputForTask(NSTask*) |
setUpStdErrorOutputForTask(NSTask*) | 1 method | 4 | ATZShell.setUpStdErrorOutputForTask(NSTask*) |
setUpTerminationHandlerForTask(NSTask*,void(^)(NSString*,NSError*)) | 1 method | 4 | ATZShell.setUpTerminationHandlerForTask(NSTask*,void(^)(NSString* ,NSError*)) |
tryToLaunchTask(NSTask*,void(^)(NSString*,NSError*)) | 1 method | 4 | ATZShell.tryToLaunchTask(NSTask*,void(^)(NSString*,NSError*)) |
drawRect(NSRect) | 0 method | 0 | ATZStatusView.drawRect(NSRect) |
initWithCoder(NSCoder*) | 0 method | 0 | ATZProgressIndicator.initWithCoder(NSCoder*) |
mouseEntered(NSEvent*) | 0 method | 0 | ATZDetailItemButton.mouseEntered(NSEvent*) |
mouseExited(NSEvent*) | 0 method | 0 | ATZDetailItemButton.mouseExited(NSEvent*) |
resetCursorRects() | 0 method | 0 | ATZDetailItemButton.resetCursorRects() |
awakeFromNib() | 0 method | 0 | ATZDetailItemButton.awakeFromNib() |
createTrackingArea() | 1 method | 1 | ATZDetailItemButton.createTrackingArea() |
xcpluginNameFromPbxproj(NSString*) | 1 method | 2 | ATZPbxprojParser.xcpluginNameFromPbxproj(NSString*) |
drawIconForPackage(NSImage*,ATZPackage*,NSRect) | 1 method | 1 | ATZPackageCheckboxCell.drawIconForPackage(NSImage*,ATZPackage*,NSRect) |
drawImage(NSImage*,NSRect,NSView*) | 0 method | 0 | ATZPackageCheckboxCell.drawImage(NSImage*,NSRect,NSView*) |
installer() | 0 method | 0 | ATZAlcatrazPackage.installer() |
update() | 0 method | 0 | ATZAlcatrazPackage.update() |
setScreenshotButton(NSButton*) | 0 method | 0 | ATZPackageTableCellView.setScreenshotButton(NSButton*) |
setWebsiteButton(NSButton*) | 0 method | 0 | ATZPackageTableCellView.setWebsiteButton(NSButton*) |
awakeFromNib() | 0 method | 0 | ATZPackageTableCellView.awakeFromNib() |
viewWillDraw() | 0 method | 0 | ATZPackageTableCellView.viewWillDraw() |
mouseEntered(NSEvent*) | 0 method | 0 | ATZPackageTableCellView.mouseEntered(NSEvent*) |
mouseExited(NSEvent*) | 0 method | 0 | ATZPackageTableCellView.mouseExited(NSEvent*) |
mouseMoved(NSEvent*) | 0 method | 0 | ATZPackageTableCellView.mouseMoved(NSEvent*) |
createTrackingArea() | 1 method | 1 | ATZPackageTableCellView.createTrackingArea() |
showButtonsIfNeeded() | 2 methods | 1 | ATZPackageTableCellView.showButtonsIfNeeded() |
initWithFrame(NSRect) | 0 method | 0 | ATZVersionLabel.initWithFrame(NSRect) |
setStyle() | 1 method | 1 | ATZVersionLabel.setStyle() |
createFakeMenu() | 0 method | 0 | __Globals.createFakeMenu() |
clickMenuItem() | 0 method | 0 | __Globals.clickMenuItem() |
fakeJSON() | 0 method | 0 | __Globals.fakeJSON() |
setUpTerminationHandlerForTaskBlock1(ATZPackage*,NSDictionary*) | 0 method | 0 | __Globals.setUpTerminationHandlerForTaskBlock1(ATZPackage* ,NSDictionary*) |
packageWithName(NSArray*,NSString*) | 0 method | 0 | __Globals.packageWithName(NSArray*,NSString*) |
buildMockInstaller(int*) | 0 method | 0 | __Globals.buildMockInstaller(int*) |
installer() | 0 method | 0 | ATZPlugin.installer() |
type() | 0 method | 0 | ATZPlugin.type() |
extension() | 0 method | 0 | ATZPlugin.extension() |
iconName() | 0 method | 0 | ATZPlugin.iconName() |
installer() | 0 method | 0 | ATZTemplate.installer() |
type() | 0 method | 0 | ATZTemplate.type() |
requiresRestart() | 0 method | 0 | ATZTemplate.requiresRestart() |
extension() | 0 method | 0 | ATZTemplate.extension() |
iconName() | 0 method | 0 | ATZTemplate.iconName() |
installer() | 0 method | 0 | ATZAlcatrazPackage.installer() |
update() | 0 method | 0 | ATZAlcatrazPackage.update() |
installer() | 0 method | 0 | ATZColorScheme.installer() |
type() | 0 method | 0 | ATZColorScheme.type() |
Statistics
Stat | MethodsCallingMe | depth |
---|---|---|
Sum: | 0 | 80 |
Average: | 0 | 0.54 |
Minimum: | 0 | 0 |
Maximum: | 0 | 4 |
Standard deviation: | 0 | 1.07 |
Variance: | 0 | 1.13 |
Rule warning: Potentially dead Fields |
warnif count > 0
from f in JustMyCode.Fields where
f.NbMethodsUsingMe == 0 &&
!f.IsPublic && // Although not recommended, public fields might be used by client applications of your Projects.
!f.IsEnumValue
select f
2 fields matched
fields | Full Name |
---|---|
requiresRestart | ATZPlugin.requiresRestart |
requiresRestart | ATZPlugin.requiresRestart |
Statistics
Stat |
---|
Sum: |
Average: |
Minimum: |
Maximum: |
Standard deviation: |
Variance: |
Visibility | 010 |
|
Rule warning: Fields should be declared as private |
warnif count > 0 from f in Application.Fields where
f.IsPublic && !f.IsProperty &&
// These conditions filter cases where fields
// doesn't represent state that should be encapsulated.
!f.IsGeneratedByCompiler &&
!f.IsEnumValue
select new { f }
49 fields matched
fields | Full Name |
---|---|
COLOR_SCHEME | __Globals.COLOR_SCHEME |
DVTCOLORSCHEME | __Globals.DVTCOLORSCHEME |
COLOR_SCHEME_ICON_NAME | __Globals.COLOR_SCHEME_ICON_NAME |
FILE_TEMPLATE | __Globals.FILE_TEMPLATE |
PLUGIN | __Globals.PLUGIN |
XCPLUGIN | __Globals.XCPLUGIN |
PLUGIN_ICON_NAME | __Globals.PLUGIN_ICON_NAME |
PROJECT_TEMPLATE | __Globals.PROJECT_TEMPLATE |
XCTEMPLATE | __Globals.XCTEMPLATE |
TEMPLATE_ICON_NAME | __Globals.TEMPLATE_ICON_NAME |
INSTALLED_COLOR_SCHEMES_RELATIVE_PATH | __Globals.INSTALLED_COLOR_SCHEMES_RELATIVE_PATH |
DOWNLOADED_COLOR_SCHEMES_RELATIVE_PATH | __Globals.DOWNLOADED_COLOR_SCHEMES_RELATIVE_PATH |
INSTALLED_FILE_TEMPLATES_RELATIVE_PATH | __Globals.INSTALLED_FILE_TEMPLATES_RELATIVE_PATH |
DOWNLOADED_FILE_TEMPLATES_RELATIVE_PATH | __Globals.DOWNLOADED_FILE_TEMPLATES_RELATIVE_PATH |
INSTALLED_PLUGINS_RELATIVE_PATH | __Globals.INSTALLED_PLUGINS_RELATIVE_PATH |
DOWNLOADED_PLUGINS_RELATIVE_PATH | __Globals.DOWNLOADED_PLUGINS_RELATIVE_PATH |
XCODE_BUILD | __Globals.XCODE_BUILD |
PROJECT | __Globals.PROJECT |
XCODEPROJ | __Globals.XCODEPROJ |
PROJECT_PBXPROJ | __Globals.PROJECT_PBXPROJ |
INSTALLED_PROJECT_TEMPLATES_RELATIVE_PATH | __Globals.INSTALLED_PROJECT_TEMPLATES_RELATIVE_PATH |
DOWNLOADED_PROJECT_TEMPLATES_RELATIVE_PATH | __Globals.DOWNLOADED_PROJECT_TEMPLATES_RELATIVE_PATH |
singleton | __Globals.singleton |
PLUGIN_NAME_REGEX | __Globals.PLUGIN_NAME_REGEX |
ALCATRAZ_PATH | __Globals.ALCATRAZ_PATH |
PLUGIN | __Globals.PLUGIN |
XCPLUGIN | __Globals.XCPLUGIN |
PLUGIN_ICON_NAME | __Globals.PLUGIN_ICON_NAME |
XCTEMPLATE | __Globals.XCTEMPLATE |
TEMPLATE_ICON_NAME | __Globals.TEMPLATE_ICON_NAME |
COLOR_SCHEME | __Globals.COLOR_SCHEME |
DVTCOLORSCHEME | __Globals.DVTCOLORSCHEME |
COLOR_SCHEME_ICON_NAME | __Globals.COLOR_SCHEME_ICON_NAME |
PROJECT_TEMPLATE | __Globals.PROJECT_TEMPLATE |
FILE_TEMPLATE | __Globals.FILE_TEMPLATE |
INSTALLED_COLOR_SCHEMES_RELATIVE_PATH | __Globals.INSTALLED_COLOR_SCHEMES_RELATIVE_PATH |
DOWNLOADED_COLOR_SCHEMES_RELATIVE_PATH | __Globals.DOWNLOADED_COLOR_SCHEMES_RELATIVE_PATH |
INSTALLED_FILE_TEMPLATES_RELATIVE_PATH | __Globals.INSTALLED_FILE_TEMPLATES_RELATIVE_PATH |
DOWNLOADED_FILE_TEMPLATES_RELATIVE_PATH | __Globals.DOWNLOADED_FILE_TEMPLATES_RELATIVE_PATH |
INSTALLED_PLUGINS_RELATIVE_PATH | __Globals.INSTALLED_PLUGINS_RELATIVE_PATH |
DOWNLOADED_PLUGINS_RELATIVE_PATH | __Globals.DOWNLOADED_PLUGINS_RELATIVE_PATH |
XCODE_BUILD | __Globals.XCODE_BUILD |
PROJECT | __Globals.PROJECT |
XCODEPROJ | __Globals.XCODEPROJ |
PROJECT_PBXPROJ | __Globals.PROJECT_PBXPROJ |
INSTALLED_PROJECT_TEMPLATES_RELATIVE_PATH | __Globals.INSTALLED_PROJECT_TEMPLATES_RELATIVE_PATH |
DOWNLOADED_PROJECT_TEMPLATES_RELATIVE_PATH | __Globals.DOWNLOADED_PROJECT_TEMPLATES_RELATIVE_PATH |
singleton | __Globals.singleton |
PLUGIN_NAME_REGEX | __Globals.PLUGIN_NAME_REGEX |
Statistics
Stat |
---|
Sum: |
Average: |
Minimum: |
Maximum: |
Standard deviation: |
Variance: |
Naming Conventions | 340 |
|
Rule warning: Instance fields should be prefixed with a 'm_' |
warnif count > 0 (from f in Fields where
!f.NameLike (@"^m_") &&
!f.IsStatic
// Don't hesitate to customize the regex of NameLike to your preference.
&& !f.IsGlobal
select new { f }).Take(10)
10 fields matched
fields | Full Name |
---|---|
NSUTF8StringEncoding | Anonymous36.NSUTF8StringEncoding |
NSRegularExpressionAnchorsMatchLines | NSRegularExpressionOptions.NSRegularExpressionAnchorsMatchLines |
NSGraphiteControlTint | Anonymous93.NSGraphiteControlTint |
NSTrackingMouseEnteredAndExited | Anonymous16.NSTrackingMouseEnteredAndExited |
NSTrackingMouseMoved | Anonymous16.NSTrackingMouseMoved |
NSTrackingActiveInActiveApp | Anonymous23.NSTrackingActiveInActiveApp |
NSTrackingAssumeInside | Anonymous31.NSTrackingAssumeInside |
NSTrackingInVisibleRect | Anonymous31.NSTrackingInVisibleRect |
NSRightTextAlignment | Anonymous29.NSRightTextAlignment |
height | CGSize.height |
Statistics
Stat |
---|
Sum: |
Average: |
Minimum: |
Maximum: |
Standard deviation: |
Variance: |
Rule warning: Static fields should be prefixed with a 's_' |
warnif count > 0 (from f in Fields where
!f.NameLike (@"^s_") &&
f.IsStatic
select new { f }).Take(10)
// Don't hesitate to customize the regex of NameLike to your preference.
10 fields matched
fields | Full Name |
---|---|
COLOR_SCHEME | __Globals.COLOR_SCHEME |
DVTCOLORSCHEME | __Globals.DVTCOLORSCHEME |
COLOR_SCHEME_ICON_NAME | __Globals.COLOR_SCHEME_ICON_NAME |
FILE_TEMPLATE | __Globals.FILE_TEMPLATE |
PLUGIN | __Globals.PLUGIN |
XCPLUGIN | __Globals.XCPLUGIN |
PLUGIN_ICON_NAME | __Globals.PLUGIN_ICON_NAME |
PROJECT_TEMPLATE | __Globals.PROJECT_TEMPLATE |
XCTEMPLATE | __Globals.XCTEMPLATE |
TEMPLATE_ICON_NAME | __Globals.TEMPLATE_ICON_NAME |
Statistics
Stat |
---|
Sum: |
Average: |
Minimum: |
Maximum: |
Standard deviation: |
Variance: |
Rule warning: Avoid methods with name too long |
warnif count > 0 from m in Application.Methods where
!m.IsGeneratedByCompiler
&& m.SimpleName.Length > 35
select new { m, m.SimpleName }
// The regex matches methods with name longer
// than 35 characters.
// Method Name doesn't contain the type
// prefix, FullName does.
// The regex computes the method name length from
// the beginning until the first open parenthesis
// or first lower than (for generic methods).
5 methods matched
methods | SimpleName | Full Name |
---|---|---|
createDownloadedColorsDirectoryIfNeeded() | createDownloadedColorsDirectoryIfNeeded | ATZColorSchemeInstaller.createDownloadedColorsDirectoryIfNeeded() |
createInstalledColorsDirectoryIfNeeded() | createInstalledColorsDirectoryIfNeeded | ATZColorSchemeInstaller.createInstalledColorsDirectoryIfNeeded() |
setUpTerminationHandlerForTaskBlock1(ATZPackage*,NSDictionary*) | setUpTerminationHandlerForTaskBlock1 | __Globals.setUpTerminationHandlerForTaskBlock1(ATZPackage* ,NSDictionary*) |
createDownloadedColorsDirectoryIfNeeded() | createDownloadedColorsDirectoryIfNeeded | ATZColorSchemeInstaller.createDownloadedColorsDirectoryIfNeeded() |
createInstalledColorsDirectoryIfNeeded() | createInstalledColorsDirectoryIfNeeded | ATZColorSchemeInstaller.createInstalledColorsDirectoryIfNeeded() |
Statistics
Stat | SimpleName |
---|---|
Sum: | 0 |
Average: | 0 |
Minimum: | 0 |
Maximum: | 0 |
Standard deviation: | 0 |
Variance: | 0 |
Rule warning: Avoid fields with name too long |
warnif count > 0 from f in Application.Fields where
!f.IsGeneratedByCompiler &&
f.Name.Length > 35
select f
// The regex matches fields with name longer
// than 35 characters.
// Field Name doesn't contain the type and
// namespace prefix, FullName does.
12 fields matched
fields | Full Name |
---|---|
INSTALLED_COLOR_SCHEMES_RELATIVE_PATH | __Globals.INSTALLED_COLOR_SCHEMES_RELATIVE_PATH |
DOWNLOADED_COLOR_SCHEMES_RELATIVE_PATH | __Globals.DOWNLOADED_COLOR_SCHEMES_RELATIVE_PATH |
INSTALLED_FILE_TEMPLATES_RELATIVE_PATH | __Globals.INSTALLED_FILE_TEMPLATES_RELATIVE_PATH |
DOWNLOADED_FILE_TEMPLATES_RELATIVE_PATH | __Globals.DOWNLOADED_FILE_TEMPLATES_RELATIVE_PATH |
INSTALLED_PROJECT_TEMPLATES_RELATIVE_PATH | __Globals.INSTALLED_PROJECT_TEMPLATES_RELATIVE_PATH |
DOWNLOADED_PROJECT_TEMPLATES_RELATIVE_PATH | __Globals.DOWNLOADED_PROJECT_TEMPLATES_RELATIVE_PATH |
INSTALLED_COLOR_SCHEMES_RELATIVE_PATH | __Globals.INSTALLED_COLOR_SCHEMES_RELATIVE_PATH |
DOWNLOADED_COLOR_SCHEMES_RELATIVE_PATH | __Globals.DOWNLOADED_COLOR_SCHEMES_RELATIVE_PATH |
INSTALLED_FILE_TEMPLATES_RELATIVE_PATH | __Globals.INSTALLED_FILE_TEMPLATES_RELATIVE_PATH |
DOWNLOADED_FILE_TEMPLATES_RELATIVE_PATH | __Globals.DOWNLOADED_FILE_TEMPLATES_RELATIVE_PATH |
INSTALLED_PROJECT_TEMPLATES_RELATIVE_PATH | __Globals.INSTALLED_PROJECT_TEMPLATES_RELATIVE_PATH |
DOWNLOADED_PROJECT_TEMPLATES_RELATIVE_PATH | __Globals.DOWNLOADED_PROJECT_TEMPLATES_RELATIVE_PATH |
Statistics
Stat |
---|
Sum: |
Average: |
Minimum: |
Maximum: |
Standard deviation: |
Variance: |
Source Files Organization | 010 |
|
Rule warning: Avoid defining multiple types in a source file |
warnif count > 0
// Build a lookup indexed by source files, values being a sequence of types defined in the source file.
let lookup = Application.Types.Where(t =>
!t.IsGlobal &&
// except nested types and types generated by compilers!
!t.IsGeneratedByCompiler )
// It could make sense to not apply this rule for enumerations.
// && !t.IsEnumeration)
// We use multi-key, since a type can be declared in multiple source files.
.ToMultiKeyLookup(t => t.SourceDecls.Select(d => d.SourceFile))
from @group in lookup where @group.Count() > 1
let sourceFile = @group.Key
// CQLinq doesn't let indexing result with sourceFile
// so we choose a typeIndex in types,
// preferably the type that has the file name.
let typeWithSourceFileName = @group.FirstOrDefault(t => t.SimpleName == sourceFile.FileNameWithoutExtension)
let typeIndex = typeWithSourceFileName ?? @group.First()
select new { typeIndex,
types = @group as IEnumerable<IType>,
sourceFile.FilePathString }
16 types matched
types | types | FilePathString | Full Name |
---|---|---|---|
ATZColorScheme | 2 types | /Users/macbookpro/Downloads/Alcatraz-master/Alcatraz/Packages/ATZColorScheme.h | ATZColorScheme |
ATZFileTemplate | 2 types | /Users/macbookpro/Downloads/Alcatraz-master/Alcatraz/Packages/ATZFileTemplate.h | ATZFileTemplate |
ATZPlugin | 2 types | /Users/macbookpro/Downloads/Alcatraz-master/Alcatraz/Packages/ATZPlugin.h | ATZPlugin |
ATZProjectTemplate | 2 types | /Users/macbookpro/Downloads/Alcatraz-master/Alcatraz/Packages/ATZProjectTemplate.h | ATZProjectTemplate |
ATZTemplate | 2 types | /Users/macbookpro/Downloads/Alcatraz-master/Alcatraz/Packages/ATZTemplate.h | ATZTemplate |
ATZColorSchemeInstaller | 2 types | /Users/macbookpro/Downloads/Alcatraz-master/Alcatraz/Installers/ATZColorSchemeInstaller.h | ATZColorSchemeInstaller |
ATZFileTemplateInstaller | 2 types | /Users/macbookpro/Downloads/Alcatraz-master/Alcatraz/Installers/ATZFileTemplateInstaller.h | ATZFileTemplateInstaller |
ATZPluginInstaller | 2 types | /Users/macbookpro/Downloads/Alcatraz-master/Alcatraz/Installers/ATZPluginInstaller.h | ATZPluginInstaller |
ATZProjectTemplateInstaller | 2 types | /Users/macbookpro/Downloads/Alcatraz-master/Alcatraz/Installers/ATZProjectTemplateInstaller.h | ATZProjectTemplateInstaller |
ATZTemplateInstaller | 2 types | /Users/macbookpro/Downloads/Alcatraz-master/Alcatraz/Installers/ATZTemplateInstaller.h | ATZTemplateInstaller |
NSFileManager+Alcatraz | 2 types | /Users/macbookpro/Downloads/Alcatraz-master/Alcatraz/Categories/NSFileManager+Alcatraz.m | NSFileManager+Alcatraz |
ATZShell | 2 types | /Users/macbookpro/Downloads/Alcatraz-master/Alcatraz/Helpers/ATZShell.h | ATZShell |
ATZShell+AnonymousExtension | 2 types | /Users/macbookpro/Downloads/Alcatraz-master/Alcatraz/Helpers/ATZShell.m | ATZShell+AnonymousExtension |
ATZPbxprojParser | 2 types | /Users/macbookpro/Downloads/Alcatraz-master/Alcatraz/Helpers/ATZPBXProjParser.h | ATZPbxprojParser |
ATZAlcatrazPackage | 2 types | /Users/macbookpro/Downloads/Alcatraz-master/Alcatraz/Packages/ATZAlcatrazPackage.h | ATZAlcatrazPackage |
ATZVersionLabel | 2 types | /Users/macbookpro/Downloads/Alcatraz-master/Alcatraz/Views/ATZVersionLabel.h | ATZVersionLabel |
Statistics
Stat | types | FilePathString |
---|---|---|
Sum: | 0 | 0 |
Average: | 0 | 0 |
Minimum: | 0 | 0 |
Maximum: | 0 | 0 |
Standard deviation: | 0 | 0 |
Variance: | 0 | 0 |
Object Oriented Design
warnif count > 0
from baseClass in JustMyCode.Types
where baseClass.IsClass && baseClass.NbChildren > 0 // <-- for optimization!
let derivedClassesUsed = baseClass.DerivedTypes.UsedBy(baseClass)
where derivedClassesUsed.Count() > 0
select new { baseClass, derivedClassesUsed }
No types matched
warnif count > 0 from t in JustMyCode.Types
where t.IsClass
let baseClasses = t.BaseClasses.ExceptThirdParty()
// Warn for classes with 3 or more base classes.
// Notice that we don't count third-party classes
// because this rule concerns your code design,
// not third-party libraries consumed design.
where baseClasses.Count() >= 3
select new { t, baseClasses,
// The metric value DepthOfInheritance takes account
// of third-party base classes
t.DepthOfInheritance }
// Branches too long in the derivation should be avoided.
// See the definition of the DepthOfInheritance metric here
// http://www.cppdepend.com/Metrics.aspx#DIT
No types matched
API Breaking Changes
// This rule warns if a publicly visible type is
// not publicly visible anymore or if it has been removed.
// Such type can break the code of your clients.
warnif count > 0 from t in codeBase.OlderVersion().Application.Types
where t.IsPublic &&
// The type has been removed and its parent project hasn't been removed ...
( (t.WasRemoved() && !t.ParentProject.WasRemoved()) ||
// ... or the type is not publicly visible anymore
!t.WasRemoved() && !t.NewerVersion().IsPublic)
select new { t,
t.NewerVersion().Visibility }
No types matched
// This rule warns if a publicly visible method is
// not publicly visible anymore or if it has been removed.
// Such method can break the code of your clients.
warnif count > 0 from m in codeBase.OlderVersion().Application.Methods
where m.IsPublic &&
// The method has been removed and its parent type hasn't been removed ...
( (m.WasRemoved() && !m.ParentType.WasRemoved()) ||
// ... or the method is not publicly visible anymore
!m.WasRemoved() && !m.NewerVersion().IsPublic)
select new { m,
NewVisibility = m.NewerVersion().Visibility }
No methods matched
// This rule warns if a publicly visible field is
// not publicly visible anymore or if it has been removed.
// Such field can break the code of your clients.
warnif count > 0 from f in codeBase.OlderVersion().Application.Fields
where f.IsPublic &&
// The field has been removed and its parent type hasn't been removed ...
( (f.WasRemoved() && !f.ParentType.WasRemoved()) ||
// ... or the field is not publicly visible anymore
!f.WasRemoved() && !f.NewerVersion().IsPublic)
select new { f,
NewVisibility = f.NewerVersion().Visibility }
No fields matched
// This rule warns if a publicly visible interface or abstract class
// has been changed and contains new abstract methods or
// if some abstract methods have been removed.
// This can break the code of clients
// that implement such interface or derive from such abstract class.
warnif count > 0 from tNewer in Application.Types where
(tNewer.IsProtocol ) &&
tNewer.IsPublic &&
tNewer.IsPresentInBothBuilds()
let tOlder = tNewer.OlderVersion() where tOlder.IsPublic
let methodsRemoved = tOlder.Methods.Where(m => m.WasRemoved())
let methodsAdded = tNewer.Methods.Where(m => m.WasAdded())
where methodsAdded.Count() > 0 || methodsRemoved.Count() > 0
select new { tNewer, methodsAdded, methodsRemoved }
No types matched
// Immutability is a strong property on a type.
// Breaking immutability can result in serious problem for an algorithm consummer
// that has been written taking account of the type immutability.
// To visualize changes in code, right-click a matched type and select:
// - Compare older and newer versions of source file
// - Compare older and newer versions disassembled with Reflector
warnif count > 0
from t in Application.Types where
t.IsPresentInBothBuilds() &&
!t.IsStatic &&
!t.IsImmutable &&
t.OlderVersion().IsImmutable
let mutableFields = from f in t.InstanceFields where !f.IsImmutable select f
select new { t, mutableFields }
No types matched
// List types that are new in the public surface of your Projects
from t in Application.Types
where t.IsPublic &&
// The type has been removed and its parent project hasn't been removed ...
( (t.WasAdded() && !t.ParentProject.WasAdded()) ||
// ... or the type existed but was not publicly visible
!t.WasAdded() && !t.OlderVersion().IsPublic)
select new { t,
OldVisibility = t.OlderVersion().Visibility }
No types matched
// List fields that are new in the public surface of your Projects
from f in Application.Fields
where f.IsPublic &&
// The method has been removed and its parent project hasn'f been removed ...
( (f.WasAdded() && !f.ParentType.WasAdded()) ||
// ... or the t existed but was not publicly visible
!f.WasAdded() && !f.OlderVersion().IsPublic)
select new { f,
OldVisibility = f.OlderVersion().Visibility }
No fields matched
Code Diff Summary
from a in Application.Projects where a.WasAdded()
select new { a, a.NbLinesOfCode }
No projects matched
from a in codeBase.OlderVersion().Application.Projects where a.WasRemoved()
select new { a, a.NbLinesOfCode }
No projects matched
from a in Application.Projects where a.CodeWasChanged()
select new { a, a.NbLinesOfCode,
oldNbLinesOfCode = a.OlderVersion().NbLinesOfCode ,
delta = (int) a.NbLinesOfCode - a.OlderVersion().NbLinesOfCode }
No projects matched
from t in Application.Types where
t.WasAdded()
select new { t, t.NbLinesOfCode }
No types matched
from t in codeBase.OlderVersion().Application.Types where
t.WasRemoved()
select new { t, t.NbLinesOfCode }
No types matched
// To visualize changes in code, right-click a matched type and select:
// - Compare older and newer versions of source file
// - Compare older and newer versions disassembled with Reflector
from t in Application.Types where t.CodeWasChanged()
//select new { t, t.NbLinesOfCode }
select new { t, t.NbLinesOfCode,
oldNbLinesOfCode = t.OlderVersion().NbLinesOfCode ,
delta = (int?) t.NbLinesOfCode - t.OlderVersion().NbLinesOfCode }
/*from t in Application.Types where t.CodeWasChanged() && t.IsPresentInBothBuild
select new { t, t.NbLinesOfCode,
oldNbLinesOfCode = t.OlderVersion().NbLinesOfCode ,
delta = (int) t.NbLinesOfCode - t.OlderVersion().NbLinesOfCode }*/
No types matched
let typesChanged = Application.Types.Where(t => t.CodeWasChanged()).ToHashSet()
from t2 in JustMyCode.Types.UsingAny(typesChanged) where
!t2.CodeWasChanged() &&
!t2.WasAdded()
let typesChangedUsed = t2.TypesUsed.Intersect(typesChanged)
select new { t2, typesChangedUsed }
No types matched
let typesChanged = Application.Types.Where(t => t.CodeWasChanged()).ToHashSet()
// 'depth' represents a code metric defined on types using
// directly or indirectly any type where code was changed.
let depth = JustMyCode.Types.DepthOfIsUsingAny(typesChanged)
from t2 in depth.DefinitionDomain where
!t2.CodeWasChanged() &&
!t2.WasAdded()
let typesChangedDirectlyUsed = t2.TypesUsed.Intersect(typesChanged)
let depthOfUsingTypesChanged = depth[t2]
orderby depthOfUsingTypesChanged
select new { t2, depthOfUsingTypesChanged, typesChangedDirectlyUsed }
No types matched
from m in Application.Methods where
!m.ParentType.WasAdded() &&
m.WasAdded()
select new { m, m.NbLinesOfCode }
No methods matched
from m in codeBase.OlderVersion().Application.Methods where
!m.ParentType.WasRemoved() &&
m.WasRemoved()
select new { m, m.NbLinesOfCode }
No methods matched
// To visualize changes in code, right-click a matched method and select:
// - Compare older and newer versions of source file
// - Compare older and newer versions disassembled with Reflector
from m in Application.Methods where m.CodeWasChanged()
select new { m, m.NbLinesOfCode,
oldNbLinesOfCode = m.OlderVersion().NbLinesOfCode ,
delta = (int?) m.NbLinesOfCode - m.OlderVersion().NbLinesOfCode }
No methods matched
let methodsChanged = Application.Methods.Where(m => m.CodeWasChanged()).ToHashSet()
from m2 in JustMyCode.Methods.UsingAny(methodsChanged ) where
!m2.CodeWasChanged() &&
!m2.WasAdded()
let methodsChangedCalled = m2.MethodsCalled.Intersect(methodsChanged)
select new { m2, methodsChangedCalled }
No methods matched
let methodsChanged = Application.Methods.Where(m => m.CodeWasChanged()).ToHashSet()
// 'depth' represents a code metric defined on methods using
// directly or indirectly any method where code was changed.
let depth = JustMyCode.Methods.DepthOfIsUsingAny(methodsChanged)
from m2 in depth.DefinitionDomain where
!m2.CodeWasChanged() &&
!m2.WasAdded()
let methodsChangedDirectlyUsed = m2.MethodsCalled.Intersect(methodsChanged)
let depthOfUsingMethodsChanged = depth[m2]
orderby depthOfUsingMethodsChanged
select new { m2, depthOfUsingMethodsChanged, methodsChangedDirectlyUsed }
No methods matched
from f in Application.Fields where
!f.ParentType.WasAdded() &&
f.WasAdded()
select new { f }
No fields matched
from f in codeBase.OlderVersion().Application.Fields where
!f.ParentType.WasRemoved() &&
f.WasRemoved()
select new { f }
No fields matched
from t in ThirdParty.Types where t.IsUsedRecently()
select new { t, t.Methods, t.Fields }
No types matched
from t in codeBase.OlderVersion().Types where t.IsNotUsedAnymore()
select new { t, t.Methods, t.Fields }
No types matched
from m in ThirdParty.Methods where
m.IsUsedRecently() &&
!m.ParentType.IsUsedRecently()
select m
No methods matched
from m in codeBase.OlderVersion().Methods where
m.IsNotUsedAnymore() &&
!m.ParentType.IsNotUsedAnymore()
select m
No methods matched
from f in ThirdParty.Fields where
f.IsUsedRecently() &&
!f.ParentType.IsUsedRecently()
select f
No fields matched
from f in codeBase.OlderVersion().Fields where
f.IsNotUsedAnymore() &&
!f.ParentType.IsNotUsedAnymore()
select f
No fields matched
Dead Code
|
warnif count > 0
let typesUsedByMethods=Types.UsedByAny(Application.Methods)
// Select types unused
let typesUnused =
from t in JustMyCode.Types where
t.NbTypesUsingMe == 0 select t
// Dead types = types used only by unused types (recursive)
let deadTypesMetric = typesUnused.FillIterative(
types => from t2 in codeBase.Application.Types.UsedByAny(types).Except(types)
where
t2.TypesUsingMe.Intersect(types).Count() == t2.NbTypesUsingMe
select t2)
from t3 in deadTypesMetric.DefinitionDomain where typesUsedByMethods.Contains(t3)
select new { t3, t3.TypesUsingMe, depth = deadTypesMetric[t3] }
15 types matched
types | TypesUsingMe | depth | Full Name |
---|---|---|---|
ATZColorSchemeInstaller | 0 type | 0 | ATZColorSchemeInstaller |
ATZPluginInstaller | 0 type | 0 | ATZPluginInstaller |
ATZDetailItemButton | 0 type | 0 | ATZDetailItemButton |
ATZPackageCheckboxCell | 0 type | 0 | ATZPackageCheckboxCell |
ATZPackageTableCellView | 0 type | 0 | ATZPackageTableCellView |
ATZVersionLabel | 0 type | 0 | ATZVersionLabel |
ATZColorSchemeInstaller | 0 type | 0 | ATZColorSchemeInstaller |
ATZPluginInstaller | 0 type | 0 | ATZPluginInstaller |
ATZVersionLabel | 0 type | 0 | ATZVersionLabel |
ATZTemplateInstaller | 2 types | 1 | ATZTemplateInstaller |
ATZShell | 1 type | 1 | ATZShell |
ATZPbxprojParser | 1 type | 1 | ATZPbxprojParser |
ATZTemplateInstaller | 2 types | 1 | ATZTemplateInstaller |
ATZShell | 1 type | 1 | ATZShell |
ATZPbxprojParser | 1 type | 1 | ATZPbxprojParser |
Statistics
Stat | TypesUsingMe | depth |
---|---|---|
Sum: | 0 | 6 |
Average: | 0 | 0.4 |
Minimum: | 0 | 0 |
Maximum: | 0 | 1 |
Standard deviation: | 0 | 0.49 |
Variance: | 0 | 0.24 |
warnif count > 0
// Filter procedure for methods that should'nt be considered as dead
let canMethodBeConsideredAsDeadProc = new Func<IMethod, bool>(
m => !m.IsGeneratedByCompiler
)
// Get methods unused
let methodsUnused =
from m2 in JustMyCode.Methods where
m2.NbMethodsCallingMe == 0 &&
canMethodBeConsideredAsDeadProc(m2)
select m2
// Dead methods = methods used only by unused methods (recursive)
let deadMethodsMetric = methodsUnused.FillIterative(
methods => // Unique loop, just to let a chance to build the hashset.
from o in new[] { new object() }
// Use a hashet to make Intersect calls much faster!
let hashset = methods.ToHashSet()
from m3 in codeBase.Application.Methods.UsedByAny(methods).Except(methods)
where canMethodBeConsideredAsDeadProc(m3) &&
// Select methods called only by methods already considered as dead
hashset.Intersect(m3.MethodsCallingMe).Count() == m3.NbMethodsCallingMe
select m3)
from m4 in JustMyCode.Methods.Intersect(deadMethodsMetric.DefinitionDomain)
select new { m4, m4.MethodsCallingMe, depth = deadMethodsMetric[m4] }
149 methods matched
methods | MethodsCallingMe | depth | Full Name |
---|---|---|---|
installer() | 0 method | 0 | ATZColorScheme.installer() |
type() | 0 method | 0 | ATZColorScheme.type() |
requiresRestart() | 0 method | 0 | ATZColorScheme.requiresRestart() |
extension() | 0 method | 0 | ATZColorScheme.extension() |
iconName() | 0 method | 0 | ATZColorScheme.iconName() |
installer() | 0 method | 0 | ATZFileTemplate.installer() |
type() | 0 method | 0 | ATZFileTemplate.type() |
installer() | 0 method | 0 | ATZPlugin.installer() |
type() | 0 method | 0 | ATZPlugin.type() |
extension() | 0 method | 0 | ATZPlugin.extension() |
iconName() | 0 method | 0 | ATZPlugin.iconName() |
installer() | 0 method | 0 | ATZProjectTemplate.installer() |
type() | 0 method | 0 | ATZProjectTemplate.type() |
installer() | 0 method | 0 | ATZTemplate.installer() |
type() | 0 method | 0 | ATZTemplate.type() |
requiresRestart() | 0 method | 0 | ATZTemplate.requiresRestart() |
extension() | 0 method | 0 | ATZTemplate.extension() |
iconName() | 0 method | 0 | ATZTemplate.iconName() |
updateBlock2(NSData*,NSError*) | 0 method | 0 | ATZColorSchemeInstaller.updateBlock2(NSData*,NSError*) |
downloadPackage(ATZPackage*,void(^)(NSError*)) | 0 method | 0 | ATZColorSchemeInstaller.downloadPackage(ATZPackage*,void(^)(NSError*)) |
updatePackage(ATZPackage*,void(^)(NSString*,NSError*)) | 0 method | 0 | ATZColorSchemeInstaller.updatePackage(ATZPackage*,void(^)(NSString* ,NSError*)) |
installPackage(ATZColorScheme*,void(^)(NSError*)) | 0 method | 0 | ATZColorSchemeInstaller.installPackage(ATZColorScheme*,void(^) (NSError*)) |
downloadRelativePath() | 0 method | 0 | ATZColorSchemeInstaller.downloadRelativePath() |
pathForInstalledPackage(ATZPackage*) | 0 method | 0 | ATZColorSchemeInstaller.pathForInstalledPackage(ATZPackage*) |
saveColorScheme(ATZPackage*,NSData*,void(^)(NSError*)) | 1 method | 1 | ATZColorSchemeInstaller.saveColorScheme(ATZPackage*,NSData*,void(^) (NSError*)) |
copyColorSchemeToXcode(ATZPackage*,void(^)(NSError*)) | 1 method | 1 | ATZColorSchemeInstaller.copyColorSchemeToXcode(ATZPackage*,void(^) (NSError*)) |
createDownloadedColorsDirectoryIfNeeded() | 1 method | 1 | ATZColorSchemeInstaller.createDownloadedColorsDirectoryIfNeeded() |
createInstalledColorsDirectoryIfNeeded() | 1 method | 1 | ATZColorSchemeInstaller.createInstalledColorsDirectoryIfNeeded() |
installedColorSchemesPath() | 1 method | 2 | ATZColorSchemeInstaller.installedColorSchemesPath() |
downloadRelativePath() | 0 method | 0 | ATZFileTemplateInstaller.downloadRelativePath() |
pathForInstalledPackage(ATZPackage*) | 0 method | 0 | ATZFileTemplateInstaller.pathForInstalledPackage(ATZPackage*) |
downloadPackage(ATZPackage*,void(^)(NSError*)) | 0 method | 0 | ATZPluginInstaller.downloadPackage(ATZPackage*,void(^)(NSError*)) |
updatePackage(ATZPackage*,void(^)(NSString*,NSError*)) | 0 method | 0 | ATZPluginInstaller.updatePackage(ATZPackage*,void(^)(NSString* ,NSError*)) |
installPackage(ATZPlugin*,void(^)(NSError*)) | 0 method | 0 | ATZPluginInstaller.installPackage(ATZPlugin*,void(^)(NSError*)) |
downloadRelativePath() | 0 method | 0 | ATZPluginInstaller.downloadRelativePath() |
pathForInstalledPackage(ATZPackage*) | 0 method | 0 | ATZPluginInstaller.pathForInstalledPackage(ATZPackage*) |
reloadXcodeForPackage(ATZPackage*,void(^)(NSError*)) | 0 method | 0 | ATZPluginInstaller.reloadXcodeForPackage(ATZPackage*,void(^)(NSError*) ) |
buildPlugin(ATZPlugin*,void(^)(NSError*)) | 1 method | 1 | ATZPluginInstaller.buildPlugin(ATZPlugin*,void(^)(NSError*)) |
findXcodeprojPathForPlugin(ATZPlugin*) | 1 method | 2 | ATZPluginInstaller.findXcodeprojPathForPlugin(ATZPlugin*) |
installNameFromPbxproj(ATZPackage*) | 1 method | 1 | ATZPluginInstaller.installNameFromPbxproj(ATZPackage*) |
downloadRelativePath() | 0 method | 0 | ATZProjectTemplateInstaller.downloadRelativePath() |
pathForInstalledPackage(ATZPackage*) | 0 method | 0 | ATZProjectTemplateInstaller.pathForInstalledPackage(ATZPackage*) |
downloadPackage(ATZPackage*,void(^)(NSError*)) | 0 method | 0 | ATZTemplateInstaller.downloadPackage(ATZPackage*,void(^)(NSError*)) |
updatePackage(ATZPackage*,void(^)(NSString*,NSError*)) | 0 method | 0 | ATZTemplateInstaller.updatePackage(ATZPackage*,void(^)(NSString* ,NSError*)) |
installPackage(ATZTemplate*,void(^)(NSError*)) | 0 method | 0 | ATZTemplateInstaller.installPackage(ATZTemplate*,void(^)(NSError*)) |
copyTemplatesToXcode(ATZTemplate*,void(^)(NSError*)) | 1 method | 1 | ATZTemplateInstaller.copyTemplatesToXcode(ATZTemplate*,void(^) (NSError*)) |
createTemplateInstallDirectory(ATZTemplate*,NSError**) | 1 method | 2 | ATZTemplateInstaller.createTemplateInstallDirectory(ATZTemplate* ,NSError**) |
templateFilesForClonedTemplate(ATZTemplate*) | 1 method | 2 | ATZTemplateInstaller.templateFilesForClonedTemplate(ATZTemplate*) |
removeItemAtPath(NSString*,void(^)(NSError*)) | 0 method | 0 | NSFileManager+Alcatraz.removeItemAtPath(NSString*,void(^)(NSError*)) |
taskOutput() | 0 method | 0 | ATZShell.taskOutput() |
setTaskOutput(NSMutableData*) | 0 method | 0 | ATZShell.setTaskOutput(NSMutableData*) |
areCommandLineToolsAvailable() | 0 method | 0 | ATZShell.areCommandLineToolsAvailable() |
executeCommand(NSString*,NSArray*,void(^)(NSString*,NSError*)) | 1 method | 2 | ATZShell.executeCommand(NSString*,NSArray*,void(^)(NSString*,NSError*) ) |
executeCommand(NSString*,NSArray*,NSString*,void(^)(NSString*,NSError* )) | 1 method | 3 | ATZShell.executeCommand(NSString*,NSArray*,NSString*,void(^)(NSString* ,NSError*)) |
setUpShellOutputForTask(NSTask*) | 1 method | 4 | ATZShell.setUpShellOutputForTask(NSTask*) |
setUpStdErrorOutputForTask(NSTask*) | 1 method | 4 | ATZShell.setUpStdErrorOutputForTask(NSTask*) |
setUpTerminationHandlerForTask(NSTask*,void(^)(NSString*,NSError*)) | 1 method | 4 | ATZShell.setUpTerminationHandlerForTask(NSTask*,void(^)(NSString* ,NSError*)) |
tryToLaunchTask(NSTask*,void(^)(NSString*,NSError*)) | 1 method | 4 | ATZShell.tryToLaunchTask(NSTask*,void(^)(NSString*,NSError*)) |
drawRect(NSRect) | 0 method | 0 | ATZStatusView.drawRect(NSRect) |
initWithCoder(NSCoder*) | 0 method | 0 | ATZProgressIndicator.initWithCoder(NSCoder*) |
mouseEntered(NSEvent*) | 0 method | 0 | ATZDetailItemButton.mouseEntered(NSEvent*) |
mouseExited(NSEvent*) | 0 method | 0 | ATZDetailItemButton.mouseExited(NSEvent*) |
resetCursorRects() | 0 method | 0 | ATZDetailItemButton.resetCursorRects() |
awakeFromNib() | 0 method | 0 | ATZDetailItemButton.awakeFromNib() |
createTrackingArea() | 1 method | 1 | ATZDetailItemButton.createTrackingArea() |
xcpluginNameFromPbxproj(NSString*) | 1 method | 2 | ATZPbxprojParser.xcpluginNameFromPbxproj(NSString*) |
drawIconForPackage(NSImage*,ATZPackage*,NSRect) | 1 method | 1 | ATZPackageCheckboxCell.drawIconForPackage(NSImage*,ATZPackage*,NSRect) |
drawImage(NSImage*,NSRect,NSView*) | 0 method | 0 | ATZPackageCheckboxCell.drawImage(NSImage*,NSRect,NSView*) |
installer() | 0 method | 0 | ATZAlcatrazPackage.installer() |
update() | 0 method | 0 | ATZAlcatrazPackage.update() |
setScreenshotButton(NSButton*) | 0 method | 0 | ATZPackageTableCellView.setScreenshotButton(NSButton*) |
setWebsiteButton(NSButton*) | 0 method | 0 | ATZPackageTableCellView.setWebsiteButton(NSButton*) |
awakeFromNib() | 0 method | 0 | ATZPackageTableCellView.awakeFromNib() |
viewWillDraw() | 0 method | 0 | ATZPackageTableCellView.viewWillDraw() |
mouseEntered(NSEvent*) | 0 method | 0 | ATZPackageTableCellView.mouseEntered(NSEvent*) |
mouseExited(NSEvent*) | 0 method | 0 | ATZPackageTableCellView.mouseExited(NSEvent*) |
mouseMoved(NSEvent*) | 0 method | 0 | ATZPackageTableCellView.mouseMoved(NSEvent*) |
createTrackingArea() | 1 method | 1 | ATZPackageTableCellView.createTrackingArea() |
showButtonsIfNeeded() | 2 methods | 1 | ATZPackageTableCellView.showButtonsIfNeeded() |
initWithFrame(NSRect) | 0 method | 0 | ATZVersionLabel.initWithFrame(NSRect) |
setStyle() | 1 method | 1 | ATZVersionLabel.setStyle() |
createFakeMenu() | 0 method | 0 | __Globals.createFakeMenu() |
clickMenuItem() | 0 method | 0 | __Globals.clickMenuItem() |
fakeJSON() | 0 method | 0 | __Globals.fakeJSON() |
setUpTerminationHandlerForTaskBlock1(ATZPackage*,NSDictionary*) | 0 method | 0 | __Globals.setUpTerminationHandlerForTaskBlock1(ATZPackage* ,NSDictionary*) |
packageWithName(NSArray*,NSString*) | 0 method | 0 | __Globals.packageWithName(NSArray*,NSString*) |
buildMockInstaller(int*) | 0 method | 0 | __Globals.buildMockInstaller(int*) |
installer() | 0 method | 0 | ATZPlugin.installer() |
type() | 0 method | 0 | ATZPlugin.type() |
extension() | 0 method | 0 | ATZPlugin.extension() |
iconName() | 0 method | 0 | ATZPlugin.iconName() |
installer() | 0 method | 0 | ATZTemplate.installer() |
type() | 0 method | 0 | ATZTemplate.type() |
requiresRestart() | 0 method | 0 | ATZTemplate.requiresRestart() |
extension() | 0 method | 0 | ATZTemplate.extension() |
iconName() | 0 method | 0 | ATZTemplate.iconName() |
installer() | 0 method | 0 | ATZAlcatrazPackage.installer() |
update() | 0 method | 0 | ATZAlcatrazPackage.update() |
installer() | 0 method | 0 | ATZColorScheme.installer() |
type() | 0 method | 0 | ATZColorScheme.type() |
Statistics
Stat | MethodsCallingMe | depth |
---|---|---|
Sum: | 0 | 80 |
Average: | 0 | 0.54 |
Minimum: | 0 | 0 |
Maximum: | 0 | 4 |
Standard deviation: | 0 | 1.07 |
Variance: | 0 | 1.13 |
warnif count > 0
from f in JustMyCode.Fields where
f.NbMethodsUsingMe == 0 &&
!f.IsPublic && // Although not recommended, public fields might be used by client applications of your Projects.
!f.IsEnumValue
select f
2 fields matched
fields | Full Name |
---|---|
requiresRestart | ATZPlugin.requiresRestart |
requiresRestart | ATZPlugin.requiresRestart |
Statistics
Stat |
---|
Sum: |
Average: |
Minimum: |
Maximum: |
Standard deviation: |
Variance: |
Trend Charts
Lines of Code
Rules Violated
Rules Violations
Max
Average
Third-Party Usage
Projects Dependencies
Assembly | Depends on | Is referenced by |
---|---|---|
Externals v1.0.0.0 | - | Alcatraz v1.0.0.0 ; AlcatrazTests v1.0.0.0 ; |
Foundation v1.0.0.0 | - | Alcatraz v1.0.0.0 ; AlcatrazTests v1.0.0.0 ; |
AppKit v1.0.0.0 | - | Alcatraz v1.0.0.0 ; AlcatrazTests v1.0.0.0 ; |
ApplicationServices v1.0.0.0 | - | Alcatraz v1.0.0.0 ; AlcatrazTests v1.0.0.0 ; |
CoreGraphics v1.0.0.0 | - | Alcatraz v1.0.0.0 ; |
ImageIO v1.0.0.0 | - | Alcatraz v1.0.0.0 ; |
CoreFoundation v1.0.0.0 | - | Alcatraz v1.0.0.0 ; |
QuartzCore v1.0.0.0 | - | Alcatraz v1.0.0.0 ; AlcatrazTests v1.0.0.0 ; |
Alcatraz v1.0.0.0 | Externals v1.0.0.0 ; Foundation v1.0.0.0 ; AppKit v1.0.0.0 ; ApplicationServices v1.0.0.0 ; CoreGraphics v1.0.0.0 ; ImageIO v1.0.0.0 ; CoreFoundation v1.0.0.0 ; QuartzCore v1.0.0.0 ; | - |
AlcatrazTests v1.0.0.0 | AppKit v1.0.0.0 ; Foundation v1.0.0.0 ; Externals v1.0.0.0 ; ApplicationServices v1.0.0.0 ; QuartzCore v1.0.0.0 ; | - |
Projects Build Order
- Alcatraz
- AlcatrazTests
Projects Build Order
- Alcatraz
- AlcatrazTests
Analysis Log : Information and Warnings
The Warnings can reveal potential flaws concerning the health of the build process.
A particular warn can be disabled through the XClarify interactive UI, panel Error List, tick the checkbox Disabled corresponding to the warn to disable.
Kind | Message |
---|---|
Info | 07/01/2014 20:48:57 Begin full analysis with XClarify v3.1.0.0 |
Info | No Baseline for Comparison loaded. |
Warning | 'Kiwi.h' file not found at /Users/macbookpro/Downloads/Alcatraz-master/AlcatrazTests/Packages/ATZPackageFactoryTests.m:24:9 |
Warning | 'Kiwi.h' file not found at /Users/macbookpro/Downloads/Alcatraz-master/AlcatrazTests/AlcatrazTests.m:24:9 |
Warning | 'Kiwi.h' file not found at /Users/macbookpro/Downloads/Alcatraz-master/AlcatrazTests/Packages/ATZPackageTests.m:9:9 |
Info | No dependency cycle detected in projects referencement graph. |
Info | 07/01/2014 20:50:23 Analyse dependencies of your application. |
Info | 07/01/2014 20:50:23 Building the report (standard). |
Info | 07/01/2014 20:50:32 Log trend metrics values. |
Info | 07/01/2014 20:50:33 Execute queries and rules |