Analyze your Dev Team's Programming Language Usage

By GITENTIAL TEAM

Gitential can help through filetype correlation statistics

Have you ever thought to track which programming languages your developers using? As an engineer manager, it can be very useful monitoring the languages your developer team has been working with over a period of time. Check your assessments about the project requirements. How closely are they aligned with the actual work and technologies required? Can you track these things? And how accurately? We have examined almost a thousand different filetype extensions. As it turned out, they hold the key.

We were curious, if we can associate the files we are working on to the progamming languages we are using. How accurate is this association? After running a lot of tests, we discovered two things.

  • First, that Gitential is about 99% accurate correlating file types to programming languages.
  • Second, we need to develop more tests for that last 1%.

We initially rolled this update out in mid-2020 and have since expanded our tests to get more of that last 1%. 

Why Do Filetype Classifications Matter?

If you’re using Gitential, you’re already familiar with the variety of different reports you can run. If not, we welcome you to try out our Demo. Track which technologies your developers have been working with, over any period of time. Filetype extensions are likely the easiest way.

The programming language statistics should align pretty closely to what you would expect with each developer’s assignments. If your work projections are off and potentially contributing to technical debt, evaluating work on file types is one means of finding out why. Maybe your projections were off, the developer had difficulties with their task, or their tasks proved more complex than anticipated. A higher frequency of bugs or bad code in particular file types or languages can guide further examination, as well. Combined with other reports, you can better identify pairings for code reviews.

The first snapshot (from April 2020) below reflects the different languages our “sample team” has been working on over the past few months:

Languages used

Our second snapshot shows what one developer, Catherine, has been working on. If you were to look through the rest of the team’s work, you’d see that Catherine and Michael are responsible for the lion’s share of work with Java Server Pages (jsp files).

Technology Stack

The Three filetype Categories in our Analytics

For transparency, we performed the analysis of the file extensions with the help of recognition programs. The program investigated the file contents and correlated it to one or more languages. The results showed that the thousand file types we examined fit three categories.

  • Category 1. Explicit file types. File extensions that are associated with only one programming language. When Gitential’s analytics encounter these unambiguous file extensions, they are automatically associated with the corresponding language. This is the case for nearly 97% (968) of the files examined. These are listed in alphabetical order in Appendix C (below).
  • Category 2. Ambiguous Files Types. File extensions that are recognized as one of multiple programming languages. In example, a frag file is used by JavaScript and GLSL. In these cases, the pattern recognition software conducts a hit rate on the files and associates the filetype accordingly. For most of these cases, the pattern recognition consistently associated the file with the correct programming language. Our test size, however, was not large enough to completely eliminate any chance of a wrong classification. We’re working to improve recognition for inc and shader files, as noted in Appendix B.

  • Category 3. Rare Files. Some file extensions are so rare that we didn’t have recognition patterns for them. For these cases, we’ve created a Priority Catalog. We assigned them the most likely file type as reflected in the catalog, Appendix A. Included in category 3, the cgi extension is sort of an exception as it can be used by any programming language.

Our team is investigating Category 2 and 3 file types to create new and/or better pattern sets. Presently, we’re confident that 99% of filetype extensions are accurately attributed by our software – especially as relates to the overall volume of files. Pinning down that last 1%, as we all know, will require more effort. We’re committed to ensuring developing our file recognition capabilities are as precise as possible.

Extensions with a preselected filetype (the first filetype in the list will be the result): 
Extension Possible file types
cake (CoffeeScript, C#)
cp (C++, Component Pascal)
cps (CPS, Component Pascal)
cs (C#, Smalltalk)
deface (HTML+ERB, Haml)
e (Eiffel, E)
eclxml (ECL, XML)
erb (HTML+ERB, Netlinx)
f (Fortran, Forth, Filebench WML)
fr (Forth, Text)
for (Fortran, Formatted, Forth)
frag (JavaScript, GLSL)
gml (Game Maker Language, Graph Modeling Language)
h (C, C++)
hl (HTML, Clojure)
in (Shell, Cmake)
inc (PAWN, C++, HTML, Assembly, PHP, POV-Ray SDL, Pascal, SQL)
m (Matlab, Limbo, MUF, Mathematica, Mercury)
ml (Standard, ML, OCaml)
mm (XML, C++)
mod (Modula-2, AMPL, Linux Kernel Module)
mysql (SQL, YAML)
re (Reason, C++)
shader (GLSL, ShaderLab)
st (Smalltalk, HTML)
Extensions having file content investigation for determining the filetype:t filetype in the list will be the result):
Extension Possible file types Recognition rate
.erb (NetLinx, HTML+ERB) 100% 100%
.inc (C++, HTML, PAWN, Pascal, SQL, POV-Ray) 76% 🡨 needs more development
.mm (C++, XML) 100%
.frag (GLSL, JavaScript) 100%
.shader (GLSL, ShaderLab) 60% 🡨 needs more development
.f (FilebenchWML, Fortran77) 100%
.fr (GLSL, F#, Formatted) 100%
.cgi (can be any programming language) 100%
.1in .di .ipf .os .smt2
.1m .diff .ipp .owl .soy
.1x .djs .ipynb .ox .sp
0.2 .dlm .irbrc .oxh .spacemacs
0.3 .dm .irclog .oxo .sparql
.3in .do .iss .oxygene .spc
.3m .dockerfile .j .oz .spec
.3qt .doh .jade .p .spin
.3x .dot .java .p4 .sps
0.4 .dpatch .jbuilder .p6 .sqf
.4th .dpr .jfif .p6l .sql
0.5 .druby .jflex .p6m .sra
0.6 .dtx .jif .pan .src
.6pl .duby .jinja .parrot .srt
.6pm .dwl .jison .pas .sru
0.7 .dyalog .jisonlex .pascal .srw
0.8 .dyl .jl .pasm .ss
.8xk .dylan .jpe .pat .sss
.8xk.txt .e .jpeg .patch .st
.8xp .eb .jpg .pb .stan
.8xp.txt .ebnf .jq .pbi .sthlp
0.9 .ebuild .js .pbt .ston
.9fs .ec .jscsrc .pck .sty
._coffee .ecl .jshintrc .pcss .styl
._ls .eclass .jslintrc .pd .sublime-build
.a51 .eclxml .json .pd_lua .sublime-commands
.abap .ecr .json-tmlanguage .pde .sublime-completions
.abbrev_defs .edc .json5 .pep .sublime-keymap
.abnf .editorconfig .jsonl .perl .sublime-macro
.ada .edn .jsonld .pfa .sublime-menu
.adb .eex .jsp .ph .sublime-mousemap
.ado .eh .jsx .php .sublime-project
.adoc .ejs .kicad_mod .php3 .sublime-settings
.adp .el .kicad_pcb .php4 .sublime-syntax
.ads .eliom .kicad_wks .php5 .sublime-theme
.afm .eliomi .kid .phtml .sublime-workspace
.agc .elm .kit .pic .sublime_metrics
.agda .em .kojo .pig .sublime_session
.ahk .emacs .krl .pike .sv
.ahkl .emacs.desktop .ksh .pir .svg
.aj .emberscript .kt .pkb .svh
.al .emf .ktm .pkgbuild .swf
.als .epj .kts .pkl .swift
.ampl .eps .l .pks .syntax
.angelscript .eq .lagda .pl .t
.anim .erb.deface .las .pl6 .tac
.apacheconf .erl .lasso .plb .tcl
.apib .escript .lasso8 .plot .tcsh
.apl .ex .lasso9 .pls .tea
.app.src .exs .latte .plsql .tern-config
.applescript .eye .lbx .plt .tern-project
.arc .f03 .ld .plx .tesc
.arcconfig .f08 .ldml .pm .tese
.arpa .f77 .lds .pm6 .tex
.as .f90 .lean .pmod .textile
.asax .f95 .less .png .tf
.asc .factor .lex .po .tfstate
.asciidoc .factor-boot-rc .lfe .pod .tfstate.backup
.ascx .factor-rc .lgt .podsl .tfvars
.asd .fan .lhs .podspec .tga
.ash .fancypack .lid .pogo .thor
.ashx .fea .lidr .pony .thrift
.asm .feature .liquid .pot .thy
.asmx .fish .lisp .pov .tif
.asn .flex .litcoffee .pp .tiff
.asp .flux .lkml .pprx .tl
.aspx .fnc .ll .prefab .tla
.asset .for .lmi .prefs .tm
.au3 .forth .login .prg .tmac
.aug .fp .logtalk .pri .tmux
.auk .fpp .lol .pro .toc
.aux .fr .lookml .profile .toml
.avsc .frg .lpr .prolog .tool
.awk .frm .ls .properties .topojson
.axd .frt .lsl .proto .tpb
.b .frx .lslp .prw .tpl
.babelrc .fsh .lsp .pryrc .tps
.backup .fshader .ltx .ps .trg
.bal .fsi .lua .ps1 .tst
.bas .fsscript .lvproj .psc .ttl
.bash .fsx .ly .psd1 .tu
.fth .m .psgi .twig
.bash_history .ftl .m4 .psm1 .txl
.bash_logout .fun .ma .pub .txt
.bash_profile .fx .mak .pug .uc
.bashrc .fxh .make .purs .udo
.bat .fy .mako .pwn .unity
.bats .g .man .pxd .uno
.bb .g4 .mao .pxi .upc
.bbx .gap .markdown .py .ur
.bdy .gawk .marko .py3 .urs
.befunge .gbl .mask .pyde .v
.bf .gbo .mat .pyi .vala
.bib .gbp .mata .pyp .vapi
.bison .gbr .matah .pyt .vark
.blade .gbs .mathematica .pytb .vb
.blade.php .gclient .matlab .pyw .vba
.bmp .gco .mawk .pyx .vbhtml
.bmx .gcode .maxhelp .qbs .vbs
.boo .gd .maxpat .qml .vcl
.boot .gdb .maxproj .r .veo
.brd .gdbinit .mcr .r2 .vert
.bro .gemrc .md .r3 .vh
.brs .gemspec .mdown .rabl .vhd
.bsl .geo .mdwn .rake .vhdl
.bsv .geojson .me .raml .vhf
.builder .geom .mediawiki .raw .vhi
.bzl .gf .meta .rb .vho
.c .gi .metadata .rbbas .vhost
.c++ .gif .metal .rbfrm .vhs
.c++-objdump .gitconfig .minid .rbmnu .vht
.c++objdump .gko .mir .rbres .vhw
.c-objdump .glf .mirah .rbtbar .view.lkml
.cake .glsl .mk .rbuild .vim
.cbl .glslv .mkd .rbuistate .vimrc
.cbx .gltf .mkdn .rbw .viper
.cc .gml .mkdown .rbx .volt
.ccp .gms .mkfile .rbxs .vrx
.cdf .gn .mkii .rd .vsh
.cdr .gni .mkiv .rdoc .vshader
.ceylon .gnu .mkvi .re .vue
.cfc .gnuplot .ml .reb .vw
.cfg .gnus .ml4 .rebol .w
.cfm .go .mli .red .wast
.cfml .god .mll .reds .wat
.cginc .golo .mly .reek .watchr
.ch .gp .mmk .regex .wdl
.chem .gpb .mms .regexp .webapp
.chpl .gpt .mo .rei .webidl
.chs .gql .mod .rest .webmanifest
.cirru .grace .model.lkml .rest.txt .weechatlog
.cjsx .gradle .monkey .rex .wiki
.ck .gradlew .monkey2 .rexx .wisp
.cl .graphql .moo .rg .wl
.cl2 .groovy .moon .rhn .wlt
.clang-format .grt .mq4 .rhtml .wlua
.clang-tidy .gshader .mq5 .ring .wmf
.click .gsp .mqh .rkt .workbook
.clj .gst .ms .rktd .wsgi
.cljc .gsx .mspec .rktl .x
.cljs .gtl .mss .rl .x10
.cljs.hl .gto .mt .rmd .xc
.cljscm .gtp .mtl .rnh .xcompose
.cljx .gtpl .mtml .rno .xht
.clp .gts .mu .robot .xhtml
.cls .gv .muf .roff .xi
.clw .gvimrc .mustache .ron .xm
.cmake .gvy .mxt .rpy .xml
.cmake.in .gyp .mysql .rq .xojo_code
.cmd .gypi .myt .rs .xojo_menu
.cob .h .n .rs.in .xojo_report
.cobol .haml .nasm .rsc .xojo_script
.coffee .handlebars .nawk .rsh .xojo_toolbar
.com .hats .nb .rst .xojo_window
.command .hb .nbp .rst.txt .xpl
.conll .hbs .nc .rsx .xpm
.conllu .hcl .ncl .ru .xproc
.coq .hh .ne .ruby .xpy
.cp .hic .nearley .rviz .xq
.cpp .hl .nf .s .xql
.cpp-objdump .hlean .nginxconf .sage .xqm
.cppobjdump .hlsl .ni .sagews .xquery
.cps .hlsli .nim .sas .xqy
.cpy .hpp .nimrod .sass .xrl
.cr .hqf .ninja .sats .xs
.creole .hrl .nit .sbt .xsl
.cs .hs .nix .sc .xslt
.csd .hsc .njk .scad .xsp-config
.csh .htaccess .nl .scala .xsp.metadata
.cshrc .htm .nlogo .scaml .xtend
.cshtml .html .no .scd .y
.cson .htmlhintrc .nqp .sce .yacc
.css .http .nr .sci .yaml
.csv .hx .nse .scm .yaml-tmlanguage
.csx .hxsl .nsh .sco .yang
.cu .hxx .nsi .scpt .yap
.cuh .hy .nu .scrbl .yar
.cw .i7x .numpy .scss .yara
.cwl .iced .numpyw .self .yml
.cxx .icl .numsc .sexp .yrl
.cxx-objdump .idr .nut .sfd .yy
.cy .ihlp .nvimrc .sh .zep
.d .ijs .ny .sh-session .zimpl
.dae .ik .obj .sig .zlogin
.darcspatch .ily .objdump .sj .zlogout
.dart .in .ol .sl .zmpl
.dats .ini .omgrofl .sld .zone
.dcl .inl .ooc .slim .zpl
.decls .ino .opa .sls .zprofile
.deface .ins .opal .sma .zsh
.desktop .intr .opencl .smali .zshenv
.desktop.in .io .orc .sml .zshrc
.dfm .iol .org .smt
.1in .di .ipf .os .smt2
.1m .diff .ipp .owl .soy
.1x .djs .ipynb .ox .sp
0.2 .dlm .irbrc .oxh .spacemacs
0.3 .dm .irclog .oxo .sparql
.3in .do .iss .oxygene .spc
.3m .dockerfile .j .oz .spec
.3qt .doh .jade .p .spin
.3x .dot .java .p4 .sps
0.4 .dpatch .jbuilder .p6 .sqf
.4th .dpr .jfif .p6l .sql
0.5 .druby .jflex .p6m .sra
0.6 .dtx .jif .pan .src
.6pl .duby .jinja .parrot .srt
.6pm .dwl .jison .pas .sru
0.7 .dyalog .jisonlex .pascal .srw
0.8 .dyl .jl .pasm .ss
.8xk .dylan .jpe .pat .sss
.8xk.txt .e .jpeg .patch .st
.8xp .eb .jpg .pb .stan
.8xp.txt .ebnf .jq .pbi .sthlp
0.9 .ebuild .js .pbt .ston
.9fs .ec .jscsrc .pck .sty
._coffee .ecl .jshintrc .pcss .styl
._ls .eclass .jslintrc .pd .sublime-build
.a51 .eclxml .json .pd_lua .sublime-commands
.abap .ecr .json-tmlanguage .pde .sublime-completions
.abbrev_defs .edc .json5 .pep .sublime-keymap
.abnf .editorconfig .jsonl .perl .sublime-macro
.ada .edn .jsonld .pfa .sublime-menu
.adb .eex .jsp .ph .sublime-mousemap
.ado .eh .jsx .php .sublime-project
.adoc .ejs .kicad_mod .php3 .sublime-settings
.adp .el .kicad_pcb .php4 .sublime-syntax
.ads .eliom .kicad_wks .php5 .sublime-theme
.afm .eliomi .kid .phtml .sublime-workspace
.agc .elm .kit .pic .sublime_metrics
.agda .em .kojo .pig .sublime_session
.ahk .emacs .krl .pike .sv
.ahkl .emacs.desktop .ksh .pir .svg
.aj .emberscript .kt .pkb .svh
.al .emf .ktm .pkgbuild .swf
.als .epj .kts .pkl .swift
.ampl .eps .l .pks .syntax
.angelscript .eq .lagda .pl .t
.anim .erb.deface .las .pl6 .tac
.apacheconf .erl .lasso .plb .tcl
.apib .escript .lasso8 .plot .tcsh
.apl .ex .lasso9 .pls .tea
.app.src .exs .latte .plsql .tern-config
.applescript .eye .lbx .plt .tern-project
.arc .f03 .ld .plx .tesc
.arcconfig .f08 .ldml .pm .tese
.arpa .f77 .lds .pm6 .tex
.as .f90 .lean .pmod .textile
.asax .f95 .less .png .tf
.asc .factor .lex .po .tfstate
.asciidoc .factor-boot-rc .lfe .pod .tfstate.backup
.ascx .factor-rc .lgt .podsl .tfvars
.asd .fan .lhs .podspec .tga
.ash .fancypack .lid .pogo .thor
.ashx .fea .lidr .pony .thrift
.asm .feature .liquid .pot .thy
.asmx .fish .lisp .pov .tif
.asn .flex .litcoffee .pp .tiff
.asp .flux .lkml .pprx .tl
.aspx .fnc .ll .prefab .tla
.asset .for .lmi .prefs .tm
.au3 .forth .login .prg .tmac
.aug .fp .logtalk .pri .tmux
.auk .fpp .lol .pro .toc
.aux .fr .lookml .profile .toml
.avsc .frg .lpr .prolog .tool
.awk .frm .ls .properties .topojson
.axd .frt .lsl .proto .tpb
.b .frx .lslp .prw .tpl
.babelrc .fsh .lsp .pryrc .tps
.backup .fshader .ltx .ps .trg
.bal .fsi .lua .ps1 .tst
.bas .fsscript .lvproj .psc .ttl
.bash .fsx .ly .psd1 .tu
.fth .m .psgi .twig
.bash_history .ftl .m4 .psm1 .txl
.bash_logout .fun .ma .pub .txt
.bash_profile .fx .mak .pug .uc
.bashrc .fxh .make .purs .udo
.bat .fy .mako .pwn .unity
.bats .g .man .pxd .uno
.bb .g4 .mao .pxi .upc
.bbx .gap .markdown .py .ur
.bdy .gawk .marko .py3 .urs
.befunge .gbl .mask .pyde .v
.bf .gbo .mat .pyi .vala
.bib .gbp .mata .pyp .vapi
.bison .gbr .matah .pyt .vark
.blade .gbs .mathematica .pytb .vb
.blade.php .gclient .matlab .pyw .vba
.bmp .gco .mawk .pyx .vbhtml
.bmx .gcode .maxhelp .qbs .vbs
.boo .gd .maxpat .qml .vcl
.boot .gdb .maxproj .r .veo
.brd .gdbinit .mcr .r2 .vert
.bro .gemrc .md .r3 .vh
.brs .gemspec .mdown .rabl .vhd
.bsl .geo .mdwn .rake .vhdl
.bsv .geojson .me .raml .vhf
.builder .geom .mediawiki .raw .vhi
.bzl .gf .meta .rb .vho
.c .gi .metadata .rbbas .vhost
.c++ .gif .metal .rbfrm .vhs
.c++-objdump .gitconfig .minid .rbmnu .vht
.c++objdump .gko .mir .rbres .vhw
.c-objdump .glf .mirah .rbtbar .view.lkml
.cake .glsl .mk .rbuild .vim
.cbl .glslv .mkd .rbuistate .vimrc
.cbx .gltf .mkdn .rbw .viper
.cc .gml .mkdown .rbx .volt
.ccp .gms .mkfile .rbxs .vrx
.cdf .gn .mkii .rd .vsh
.cdr .gni .mkiv .rdoc .vshader
.ceylon .gnu .mkvi .re .vue
.cfc .gnuplot .ml .reb .vw
.cfg .gnus .ml4 .rebol .w
.cfm .go .mli .red .wast
.cfml .god .mll .reds .wat
.cginc .golo .mly .reek .watchr
.ch .gp .mmk .regex .wdl
.chem .gpb .mms .regexp .webapp
.chpl .gpt .mo .rei .webidl
.chs .gql .mod .rest .webmanifest
.cirru .grace .model.lkml .rest.txt .weechatlog
.cjsx .gradle .monkey .rex .wiki
.ck .gradlew .monkey2 .rexx .wisp
.cl .graphql .moo .rg .wl
.cl2 .groovy .moon .rhn .wlt
.clang-format .grt .mq4 .rhtml .wlua
.clang-tidy .gshader .mq5 .ring .wmf
.click .gsp .mqh .rkt .workbook
.clj .gst .ms .rktd .wsgi
.cljc .gsx .mspec .rktl .x
.cljs .gtl .mss .rl .x10
.cljs.hl .gto .mt .rmd .xc
.cljscm .gtp .mtl .rnh .xcompose
.cljx .gtpl .mtml .rno .xht
.clp .gts .mu .robot .xhtml
.cls .gv .muf .roff .xi
.clw .gvimrc .mustache .ron .xm
.cmake .gvy .mxt .rpy .xml
.cmake.in .gyp .mysql .rq .xojo_code
.cmd .gypi .myt .rs .xojo_menu
.cob .h .n .rs.in .xojo_report
.cobol .haml .nasm .rsc .xojo_script
.coffee .handlebars .nawk .rsh .xojo_toolbar
.com .hats .nb .rst .xojo_window
.command .hb .nbp .rst.txt .xpl
.conll .hbs .nc .rsx .xpm
.conllu .hcl .ncl .ru .xproc
.coq .hh .ne .ruby .xpy
.cp .hic .nearley .rviz .xq
.cpp .hl .nf .s .xql
.cpp-objdump .hlean .nginxconf .sage .xqm
.cppobjdump .hlsl .ni .sagews .xquery
.cps .hlsli .nim .sas .xqy
.cpy .hpp .nimrod .sass .xrl
.cr .hqf .ninja .sats .xs
.creole .hrl .nit .sbt .xsl
.cs .hs .nix .sc .xslt
.csd .hsc .njk .scad .xsp-config
.csh .htaccess .nl .scala .xsp.metadata
.cshrc .htm .nlogo .scaml .xtend
.cshtml .html .no .scd .y
.cson .htmlhintrc .nqp .sce .yacc
.css .http .nr .sci .yaml
.csv .hx .nse .scm .yaml-tmlanguage
.csx .hxsl .nsh .sco .yang
.cu .hxx .nsi .scpt .yap
.cuh .hy .nu .scrbl .yar
.cw .i7x .numpy .scss .yara
.cwl .iced .numpyw .self .yml
.cxx .icl .numsc .sexp .yrl
.cxx-objdump .idr .nut .sfd .yy
.cy .ihlp .nvimrc .sh .zep
.d .ijs .ny .sh-session .zimpl
.dae .ik .obj .sig .zlogin
.darcspatch .ily .objdump .sj .zlogout
.dart .in .ol .sl .zmpl
.dats .ini .omgrofl .sld .zone
.dcl .inl .ooc .slim .zpl
.decls .ino .opa .sls .zprofile
.deface .ins .opal .sma .zsh
.desktop .intr .opencl .smali .zshenv
.desktop.in .io .orc .sml .zshrc
.dfm .iol .org .smt

About Gitential

Gitential is an Analytics and Engineering Intelligence service provider bringing visibility and optimization highlights on teams’ productivity. Our mission is to enable faster, data-driven decisions to continuously improve software delivery team cost performance and proactive risk management.

Ready to explore different ways to improve your software projects’ efficiency? Schedule a meeting and we will be happy to listen to and discuss your needs.

Have a project but are not quite ready to contact us? See if Gitential is a fit for you!

FREE TRIAL FOR LIFE
for up to 5 repos, 10 devs and 3 months of data

Article updated: August 03, 2022

Did you like our content?

Spread the word

Did you like our content?

Spread the word