microsoft / WinObjC
Source Code Overview

Analysis scope, overview of main, test, generated, deployment, build, and other code.

Source Code Analysis Scope
Files includes and excluded from analyses
vcxproj
txt
filters
targets
xaml
plist
props
patch
in
storyboard
hlsl
csproj
vstemplate
m4
pri
st
natvis
S
mk
vsixmanifest
l
cmake
y
gitattributes
sas
wat
resx
scm
lex
cmd
nuspec
cfg
spec
clang-format
gitmodules
mms
inl
obj
  • 61 extensions are included in analyses: h, mm, cpp, c, vcxproj, m, txt, filters, cs, java, json, targets, xaml, plist, cc, xml, props, patch, ps1, in, storyboard, md, hlsl, gitignore, csproj, vstemplate, m4, pri, st, hpp, py, bat, natvis, S, sh, asm, mk, vsixmanifest, l, cmake, y, xib, gitattributes, sas, wat, resx, scm, lex, cmd, nuspec, cfg, spec, html, clang-format, gitmodules, mms, yml, inc, htm, inl, obj
  • 10 criteria are used to exclude files from analysis:
    • exclude files with path like ".*/[.][a-zA-Z0-9_]+.*" (Hidden files and folders) (19 files).
    • exclude files with path like ".*/(3rd|[Tt]hird)[-_]?[Pp]arty/.*" (Dependencies) (1047 files).
    • exclude files with path like ".*/deps/.*" (Dependencies) (391 files).
    • exclude files with path like ".*[.]m4" (stuff autogenerated by autoconf - still C deps) (0 files).
    • exclude files with path like ".*/docs/.*" (Documentation) (6 files).
    • exclude files with path like ".*[.]resx" (The resx resource files) (2 files).
    • exclude files with path like ".*/git[-]history[.]txt" (Git history) (1 file).
    • exclude files with path like ".*/git[-][a-zA-Z0-9_]+[.]txt" (Git data exports for sokrates analyses) (0 files).
    • exclude files with path like ".*/sokrates_conventions[.]json" (Sokrates scoping conventions) (1 file).
    • exclude files with path like ".*[.]txt" (Text files) (52 files).
Overview of Analyzed Files
Basic stats on analyzed files
Intro
For analysis purposes we separate files in scope into several categories: main, test, generated, deployment and build, and other.

  • The main category contains all manually created source code files that are being used in the production.
  • Files in the main category are used as input for other analyses: logical decomposition, concerns, duplication, file size, unit size, and conditional complexity.
  • Test source code files are used only for testing of the product. These files are normally not deployed to production.
  • Build and deployment source code files are used to configure or support build and deployment process.
  • Generated source code files are automatically generated files that have not been manually changed after generation.
  • While a source code folder may contain a number of files, we are primarily interested in the source code files that are being written and maintained by developers.
  • Files containing binaries, documentation, or third-party libraries, for instance, are excluded from analysis. The exception are third-party libraries that have been changed by developers.

main584648 LOC (77%) 4815 files
test85063 LOC (11%) 570 files
generated48 LOC (<1%) 1 files
build and deployment858 LOC (<1%) 8 files
other85736 LOC (11%) 448 files
Main Code
All manually created or maintained source code that defines logic of the product that is run in a production environment.
vcxproj
filters
targets
props
xaml
natvis
y
l
vstemplate
vsixmanifest
s
cmd
Explore:   circles  |  sunburst
  • The following criteria are used to filter files:
    • files with paths like ".*".
  • 4815 files match defined criteria (584,648 lines of code, 100.0% vs. main code):
    • 2,714 *.h files (287,405 lines of code)
    • 1,295 *.mm files (140,533 lines of code)
    • 87 *.c files (80,814 lines of code)
    • 354 *.cpp files (38,059 lines of code)
    • 143 *.vcxproj files (16,279 lines of code)
    • 65 *.cs files (6,782 lines of code)
    • 23 *.filters files (3,560 lines of code)
    • 4 *.m files (3,456 lines of code)
    • 42 *.targets files (2,340 lines of code)
    • 4 *.hpp files (2,145 lines of code)
    • 20 *.ps1 files (1,005 lines of code)
    • 31 *.props files (686 lines of code)
    • 12 *.xaml files (391 lines of code)
    • 2 *.asm files (350 lines of code)
    • 3 *.natvis files (291 lines of code)
    • 1 *.y files (203 lines of code)
    • 1 *.l files (103 lines of code)
    • 7 *.vstemplate files (101 lines of code)
    • 2 *.vsixmanifest files (53 lines of code)
    • 3 *.s files (51 lines of code)
    • 1 *.yml files (38 lines of code)
    • 1 *.cmd files (3 lines of code)
  • " *.h" is biggest, containing 49.16% of code.
  • " *.cmd" is smallest, containing 0% of code.


*.h287405 LOC (49%) 2714 files
*.mm140533 LOC (24%) 1295 files
*.c80814 LOC (13%) 87 files
*.cpp38059 LOC (6%) 354 files
*.vcxproj16279 LOC (2%) 143 files
*.cs6782 LOC (1%) 65 files
*.filters3560 LOC (<1%) 23 files
*.m3456 LOC (<1%) 4 files
*.targets2340 LOC (<1%) 42 files
*.hpp2145 LOC (<1%) 4 files
*.ps11005 LOC (<1%) 20 files
*.props686 LOC (<1%) 31 files
*.xaml391 LOC (<1%) 12 files
*.asm350 LOC (<1%) 2 files
*.natvis291 LOC (<1%) 3 files
*.y203 LOC (<1%) 1 files
*.l103 LOC (<1%) 1 files
*.vstemplate101 LOC (<1%) 7 files
*.vsixmanifest53 LOC (<1%) 2 files
*.s51 LOC (<1%) 3 files
*.yml38 LOC (<1%) 1 files
*.cmd3 LOC (<1%) 1 files
Test Code
Used only for testing of the product. Normally not deployed in a production environment.
vcxproj
filters
csproj
mk
xaml
inl
Explore:   circles  |  sunburst
  • The following criteria are used to filter files:
    • files with paths like ".*/[Tt]ests/.*".
    • files with paths like ".*/UnitTests?/.*".
    • files with paths like ".*_test[.].*".
    • files with paths like ".*[-]test[-].*".
    • files with paths like ".*/[Tt]est/.*".
    • files with paths like ".*[.][Tt]ests[.].*".
    • files with paths like ".*[.]tests[.].*".
    • files with any line of content like ".*/simpletest/.*".
    • files with paths like ".*UnitTests/.*".
  • 570 files match defined criteria (85,063 lines of code, 14.5% vs. main code):
    • 225 *.mm files (40,189 lines of code)
    • 126 *.h files (16,748 lines of code)
    • 83 *.m files (8,269 lines of code)
    • 54 *.cpp files (5,719 lines of code)
    • 36 *.vcxproj files (5,716 lines of code)
    • 9 *.cc files (5,693 lines of code)
    • 16 *.filters files (1,629 lines of code)
    • 4 *.ps1 files (370 lines of code)
    • 4 *.cs files (190 lines of code)
    • 1 *.py files (178 lines of code)
    • 1 *.csproj files (104 lines of code)
    • 1 *.mk files (94 lines of code)
    • 9 *.xaml files (84 lines of code)
    • 1 *.inl files (80 lines of code)
  • " *.mm" is biggest, containing 47.25% of code.
  • " *.inl" is smallest, containing 0.09% of code.


*.mm40189 LOC (47%) 225 files
*.h16748 LOC (19%) 126 files
*.m8269 LOC (9%) 83 files
*.cpp5719 LOC (6%) 54 files
*.vcxproj5716 LOC (6%) 36 files
*.cc5693 LOC (6%) 9 files
*.filters1629 LOC (1%) 16 files
*.ps1370 LOC (<1%) 4 files
*.cs190 LOC (<1%) 4 files
*.py178 LOC (<1%) 1 files
*.csproj104 LOC (<1%) 1 files
*.mk94 LOC (<1%) 1 files
*.xaml84 LOC (<1%) 9 files
*.inl80 LOC (<1%) 1 files
Generated Code
Automatically generated files, not manually changed after generation.
Explore:   circles  |  sunburst
  • The following criteria are used to filter files:
    • files with paths like ".*[.]cs" AND any line of content like "[/][/][ ]*".
  • 1 file matches defined criteria (48 lines of code, 0.0% vs. main code). All matches are in *.cs files.


*.cs48 LOC (100%) 1 files
Build and Deployment Code
Source code used to configure or support build and deployment process.
csproj
nuspec
Explore:   circles  |  sunburst
  • The following criteria are used to filter files:
    • files with paths like ".*[.]git[a-z]+".
    • files with paths like ".*/[.]gitattributes".
    • files with paths like ".*/[.]gitignore".
    • files with paths like ".*/[.]gitmodules".
    • files with paths like ".*[.]nuspec".
    • files with paths like ".*[.]sh".
    • files with paths like ".*[.]mk".
    • files with paths like ".*[.]bat".
    • files with paths like ".*[.]csproj".
  • 8 files match defined criteria (858 lines of code, 0.1% vs. main code):
    • 7 *.csproj files (839 lines of code)
    • 1 *.nuspec files (19 lines of code)
  • " *.csproj" is biggest, containing 97.79% of code.
  • " *.nuspec" is smallest, containing 2.21% of code.


*.csproj839 LOC (97%) 7 files
*.nuspec19 LOC (2%) 1 files
Other Code
obj
vcxproj
storyboard
patch
plist
filters
xaml
Explore:   circles  |  sunburst
  • The following criteria are used to filter files:
    • files with paths like ".*[.]json".
    • files with paths like ".*[.]txt".
    • files with paths like ".*/[.]gitignore".
    • files with paths like ".*[.]plist".
    • files with paths like ".*[.]md".
    • files with paths like ".*/LICENSE[.][a-z0-9]+".
    • files with paths like ".*/README[.][a-z0-9]+".
    • files with paths like ".*[.]patch".
    • files with paths like ".*[.]scm".
    • files with paths like ".*/[Dd]emos?/.*".
    • files with paths like ".*/[Ee]xamples/.*".
    • files with paths like ".*/[Ss]amples/.*".
    • files with paths like ".*[.]storyboard".
    • files with paths like ".*[.]xib".
    • files with paths like ".*[.](xml|xsd|robot|sql|pgsql|dashboard|profile|ipynb|raml|avsc|al)".
  • 448 files match defined criteria (85,736 lines of code, 14.7% vs. main code):
    • 29 *.xml files (51,318 lines of code)
    • 105 *.m files (11,732 lines of code)
    • 1 *.obj files (7,156 lines of code)
    • 10 *.vcxproj files (2,536 lines of code)
    • 20 *.storyboard files (2,474 lines of code)
    • 24 *.patch files (2,142 lines of code)
    • 11 *.mm files (1,935 lines of code)
    • 34 *.plist files (1,483 lines of code)
    • 12 *.filters files (1,426 lines of code)
    • 43 *.json files (1,374 lines of code)
    • 120 *.h files (1,040 lines of code)
    • 21 *.cpp files (673 lines of code)
    • 5 *.md files (231 lines of code)
    • 2 *.xib files (132 lines of code)
    • 11 *.xaml files (84 lines of code)
  • " *.xml" is biggest, containing 59.86% of code.
  • " *.xaml" is smallest, containing 0.1% of code.


*.xml51318 LOC (59%) 29 files
*.m11732 LOC (13%) 105 files
*.obj7156 LOC (8%) 1 files
*.vcxproj2536 LOC (2%) 10 files
*.storyboard2474 LOC (2%) 20 files
*.patch2142 LOC (2%) 24 files
*.mm1935 LOC (2%) 11 files
*.plist1483 LOC (1%) 34 files
*.filters1426 LOC (1%) 12 files
*.json1374 LOC (1%) 43 files
*.h1040 LOC (1%) 120 files
*.cpp673 LOC (<1%) 21 files
*.md231 LOC (<1%) 5 files
*.xib132 LOC (<1%) 2 files
*.xaml84 LOC (<1%) 11 files
Analyzers
Info about analyzers used for source code examinations.
  • *.h files are analyzed with CppAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Advanced code cleaning (empty lines and comments removed for LOC calculations, additional cleaning for duplication calculations)
    • Unit size analysis
    • Conditional complexity analysis
    • Advanced heuristic dependency analysis
  • *.mm files are analyzed with CppAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Advanced code cleaning (empty lines and comments removed for LOC calculations, additional cleaning for duplication calculations)
    • Unit size analysis
    • Conditional complexity analysis
    • Advanced heuristic dependency analysis
  • *.c files are analyzed with CStyleAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Advanced code cleaning (empty lines and comments removed for LOC calculations, additional cleaning for duplication calculations)
    • Unit size analysis
    • Conditional complexity analysis
    • No dependency analysis
  • *.cpp files are analyzed with CppAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Advanced code cleaning (empty lines and comments removed for LOC calculations, additional cleaning for duplication calculations)
    • Unit size analysis
    • Conditional complexity analysis
    • Advanced heuristic dependency analysis
  • *.vcxproj files are analyzed with XmlAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Advanced code cleaning (empty lines and comments removed for LOC calculations, additional cleaning for duplication calculations)
    • No unit size analysis
    • No conditional complexity analysis
    • No dependency analysis
  • *.cs files are analyzed with CSharpAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Advanced code cleaning (empty lines and comments removed for LOC calculations, additional cleaning for duplication calculations)
    • Unit size analysis
    • Conditional complexity analysis
    • Advanced heuristic dependency analysis (based on namespace heuristics)
  • *.filters files are analyzed with XmlAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Advanced code cleaning (empty lines and comments removed for LOC calculations, additional cleaning for duplication calculations)
    • No unit size analysis
    • No conditional complexity analysis
    • No dependency analysis
  • *.m files are analyzed with CppAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Advanced code cleaning (empty lines and comments removed for LOC calculations, additional cleaning for duplication calculations)
    • Unit size analysis
    • Conditional complexity analysis
    • Advanced heuristic dependency analysis
  • *.targets files are analyzed with XmlAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Advanced code cleaning (empty lines and comments removed for LOC calculations, additional cleaning for duplication calculations)
    • No unit size analysis
    • No conditional complexity analysis
    • No dependency analysis
  • *.hpp files are analyzed with CppAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Advanced code cleaning (empty lines and comments removed for LOC calculations, additional cleaning for duplication calculations)
    • Unit size analysis
    • Conditional complexity analysis
    • Advanced heuristic dependency analysis
  • *.ps1 files are analyzed with DefaultLanguageAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Basic code cleaning (empty lines removed for LOC calculations and duplication calculations)
    • No unit size analysis
    • No conditional complexity analysis
    • No dependency analysis
  • *.props files are analyzed with XmlAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Advanced code cleaning (empty lines and comments removed for LOC calculations, additional cleaning for duplication calculations)
    • No unit size analysis
    • No conditional complexity analysis
    • No dependency analysis
  • *.xaml files are analyzed with XmlAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Advanced code cleaning (empty lines and comments removed for LOC calculations, additional cleaning for duplication calculations)
    • No unit size analysis
    • No conditional complexity analysis
    • No dependency analysis
  • *.asm files are analyzed with DefaultLanguageAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Basic code cleaning (empty lines removed for LOC calculations and duplication calculations)
    • No unit size analysis
    • No conditional complexity analysis
    • No dependency analysis
  • *.natvis files are analyzed with XmlAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Advanced code cleaning (empty lines and comments removed for LOC calculations, additional cleaning for duplication calculations)
    • No unit size analysis
    • No conditional complexity analysis
    • No dependency analysis
  • *.y files are analyzed with DefaultLanguageAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Basic code cleaning (empty lines removed for LOC calculations and duplication calculations)
    • No unit size analysis
    • No conditional complexity analysis
    • No dependency analysis
  • *.l files are analyzed with DefaultLanguageAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Basic code cleaning (empty lines removed for LOC calculations and duplication calculations)
    • No unit size analysis
    • No conditional complexity analysis
    • No dependency analysis
  • *.vstemplate files are analyzed with XmlAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Advanced code cleaning (empty lines and comments removed for LOC calculations, additional cleaning for duplication calculations)
    • No unit size analysis
    • No conditional complexity analysis
    • No dependency analysis
  • *.vsixmanifest files are analyzed with XmlAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Advanced code cleaning (empty lines and comments removed for LOC calculations, additional cleaning for duplication calculations)
    • No unit size analysis
    • No conditional complexity analysis
    • No dependency analysis
  • *.s files are analyzed with DefaultLanguageAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Basic code cleaning (empty lines removed for LOC calculations and duplication calculations)
    • No unit size analysis
    • No conditional complexity analysis
    • No dependency analysis
  • *.yml files are analyzed with YamlAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Advanced code cleaning (empty lines and comments removed for LOC calculations, additional cleaning for duplication calculations)
    • No unit size analysis
    • No conditional complexity analysis
    • No dependency analysis
  • *.cmd files are analyzed with DefaultLanguageAnalyzer:
    • All basic standard analyses supported (source code overview, duplication, file size, concerns, findings, metrics, controls)
    • Basic code cleaning (empty lines removed for LOC calculations and duplication calculations)
    • No unit size analysis
    • No conditional complexity analysis
    • No dependency analysis


2022-01-30 10:22