facebook / flipper
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
podspec
mdx
txt
plist
properties
patch
storyboard
snap
hs
eslintignore
gitattributes
npmignore
pro
cmd
  • 41 extensions are included in analyses: tsx, java, h, json, podspec, mdx, mm, md, js, m, xml, ts, gradle, yml, kt, cpp, txt, plist, sh, properties, svg, patch, gitignore, swift, css, html, yaml, storyboard, snap, less, rs, hs, eslintignore, gitattributes, npmignore, bat, pro, cmd, xib, cc, toml
  • 8 criteria are used to exclude files from analysis:
    • exclude files with path like ".*/[.][a-zA-Z0-9_]+.*" (Hidden files and folders) (58 files).
    • exclude files with path like ".*/react(-[^.]*)?\.js" (React) (4 files).
    • exclude files with path like ".*\.d\.ts" (Typescript definition files) (21 files).
    • exclude files with path like ".*/proguard[-]rules[.]pro" (ProGuard) (2 files).
    • exclude files with path like ".*/gradle/wrapper/.*" (Gradle) (2 files).
    • exclude files with path like ".*/docs/.*" (Documentation) (67 files).
    • exclude files with path like ".*/bin/.*" (Binaries for distribution) (1 file).
    • exclude files with path like ".*/(3rd|[Tt]hird)[-_]?[Pp]arty/.*" (Dependencies) (20 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.

main97772 LOC (73%) 1071 files
test25399 LOC (18%) 199 files
generated0 LOC (0%) 0 files
build and deployment2070 LOC (1%) 55 files
other8446 LOC (6%) 189 files
Main Code
All manually created or maintained source code that defines logic of the product that is run in a production environment.
hs
cmd
Explore:   circles  |  sunburst
  • The following criteria are used to filter files:
    • files with paths like ".*".
  • 1071 files match defined criteria (97,772 lines of code, 100.0% vs. main code):
    • 581 *.tsx files (63,825 lines of code)
    • 151 *.java files (12,060 lines of code)
    • 49 *.mm files (6,085 lines of code)
    • 16 *.cpp files (3,177 lines of code)
    • 129 *.h files (3,144 lines of code)
    • 37 *.m files (2,327 lines of code)
    • 6 *.css files (2,317 lines of code)
    • 26 *.js files (1,706 lines of code)
    • 19 *.kt files (574 lines of code)
    • 10 *.ts files (535 lines of code)
    • 4 *.rs files (503 lines of code)
    • 3 *.hs files (377 lines of code)
    • 5 *.html files (351 lines of code)
    • 15 *.xml files (284 lines of code)
    • 9 *.swift files (266 lines of code)
    • 4 *.less files (150 lines of code)
    • 5 *.yaml files (59 lines of code)
    • 1 *.toml files (26 lines of code)
    • 1 *.cmd files (6 lines of code)
  • " *.tsx" is biggest, containing 65.28% of code.
  • " *.cmd" is smallest, containing 0.01% of code.


*.tsx63825 LOC (65%) 581 files
*.java12060 LOC (12%) 151 files
*.mm6085 LOC (6%) 49 files
*.cpp3177 LOC (3%) 16 files
*.h3144 LOC (3%) 129 files
*.m2327 LOC (2%) 37 files
*.css2317 LOC (2%) 6 files
*.js1706 LOC (1%) 26 files
*.kt574 LOC (<1%) 19 files
*.ts535 LOC (<1%) 10 files
*.rs503 LOC (<1%) 4 files
*.hs377 LOC (<1%) 3 files
*.html351 LOC (<1%) 5 files
*.xml284 LOC (<1%) 15 files
*.swift266 LOC (<1%) 9 files
*.less150 LOC (<1%) 4 files
*.yaml59 LOC (<1%) 5 files
*.toml26 LOC (<1%) 1 files
*.cmd6 LOC (<1%) 1 files
Test Code
Used only for testing of the product. Normally not deployed in a production environment.
podspec
snap
Explore:   circles  |  sunburst
  • The following criteria are used to filter files:
    • files with paths like ".*__tests__.*".
    • files with paths like ".*/[Ss]pecs/.*".
    • files with paths like ".*[.]spec[.]ts".
    • files with paths like ".*/__mocks?__/.*".
    • files with paths like ".*[.]spec[.]tsx".
    • files with paths like ".*__test__.*".
    • files with paths like ".*[.]snap".
    • files with paths like ".*/[Tt]est/.*".
    • files with paths like ".*/src/androidTest/.*".
    • files with paths like ".*_test[.].*".
  • 199 files match defined criteria (25,399 lines of code, 26.0% vs. main code):
    • 117 *.tsx files (18,086 lines of code)
    • 60 *.podspec files (4,586 lines of code)
    • 5 *.snap files (1,326 lines of code)
    • 13 *.java files (1,231 lines of code)
    • 2 *.ts files (150 lines of code)
    • 1 *.xml files (11 lines of code)
    • 1 *.kt files (9 lines of code)
  • " *.tsx" is biggest, containing 71.21% of code.
  • " *.kt" is smallest, containing 0.04% of code.


*.tsx18086 LOC (71%) 117 files
*.podspec4586 LOC (18%) 60 files
*.snap1326 LOC (5%) 5 files
*.java1231 LOC (4%) 13 files
*.ts150 LOC (<1%) 2 files
*.xml11 LOC (<1%) 1 files
*.kt9 LOC (<1%) 1 files
Build and Deployment Code
Source code used to configure or support build and deployment process.
podspec
Explore:   circles  |  sunburst
  • The following criteria are used to filter files:
    • files with paths like ".*/AndroidManifest[.]xml".
    • files with paths like ".*[.]gradle".
    • files with paths like ".*[.]podspec".
    • files with paths like ".*[.]git[a-z]+".
    • files with paths like ".*/[.]gitignore".
    • files with paths like ".*/package[.]json".
    • files with paths like ".*/[.]gitattributes".
    • files with paths like ".*[.]bat".
    • files with paths like ".*[.]sh".
  • 55 files match defined criteria (2,070 lines of code, 2.1% vs. main code):
    • 8 *.podspec files (747 lines of code)
    • 17 *.gradle files (681 lines of code)
    • 13 *.sh files (329 lines of code)
    • 15 *.xml files (163 lines of code)
    • 2 *.bat files (150 lines of code)
  • " *.podspec" is biggest, containing 36.09% of code.
  • " *.bat" is smallest, containing 7.25% of code.


*.podspec747 LOC (36%) 8 files
*.gradle681 LOC (32%) 17 files
*.sh329 LOC (15%) 13 files
*.xml163 LOC (7%) 15 files
*.bat150 LOC (7%) 2 files
Other Code
storyboard
plist
patch
properties
txt
Explore:   circles  |  sunburst
  • The following criteria are used to filter files:
    • files with paths like ".*[.]md".
    • files with paths like ".*[.]txt".
    • files with paths like ".*[.]json".
    • files with paths like ".*/[.]npmignore".
    • files with paths like ".*/README[.][a-z0-9]+".
    • files with paths like ".*/[.]gitignore".
    • files with paths like ".*[.]plist".
    • files with paths like ".*[.]xib".
    • files with paths like ".*[.]properties".
    • files with paths like ".*/[.]eslintignore".
    • files with paths like ".*[.]mdx".
    • files with paths like ".*[.]patch".
    • files with paths like ".*[.]svg".
    • files with paths like ".*[.]storyboard".
  • 189 files match defined criteria (8,446 lines of code, 8.6% vs. main code):
    • 102 *.json files (4,839 lines of code)
    • 35 *.md files (1,425 lines of code)
    • 5 *.storyboard files (981 lines of code)
    • 13 *.plist files (562 lines of code)
    • 11 *.patch files (300 lines of code)
    • 11 *.properties files (136 lines of code)
    • 7 *.txt files (124 lines of code)
    • 1 *.xib files (42 lines of code)
    • 4 *.svg files (37 lines of code)
  • " *.json" is biggest, containing 57.29% of code.
  • " *.svg" is smallest, containing 0.44% of code.


*.json4839 LOC (57%) 102 files
*.md1425 LOC (16%) 35 files
*.storyboard981 LOC (11%) 5 files
*.plist562 LOC (6%) 13 files
*.patch300 LOC (3%) 11 files
*.properties136 LOC (1%) 11 files
*.txt124 LOC (1%) 7 files
*.xib42 LOC (<1%) 1 files
*.svg37 LOC (<1%) 4 files
Analyzers
Info about analyzers used for source code examinations.
  • *.tsx files are analyzed with TypeScriptAnalyzer:
    • 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
  • *.java files are analyzed with JavaAnalyzer:
    • 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 package names)
  • *.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
  • *.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
  • *.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
  • *.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
  • *.css files are analyzed with CssAnalyzer:
    • 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
  • *.js files are analyzed with JavaScriptAnalyzer:
    • 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
  • *.kt files are analyzed with KotlinAnalyzer:
    • 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
    • Basic heuristic dependency analysis (based on imports and package statements)
  • *.ts files are analyzed with TypeScriptAnalyzer:
    • 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
  • *.rs files are analyzed with RustAnalyzer:
    • 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
  • *.hs 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
  • *.html files are analyzed with HtmlAnalyzer:
    • 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
  • *.xml 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
  • *.swift files are analyzed with SwiftAnalyzer:
    • 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
  • *.less files are analyzed with LessAnalyzer:
    • 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
  • *.yaml 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
  • *.toml 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
  • *.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-04-14 23:22