Use of `dash` and `s` functions by MELPA packages

From: Alexis Subject: Use of `dash` and `s` functions by MELPA packages Date: Tue, 27 Jan 2015 20:13:07 +1100

Hi all, Out of interest, i've written a simple Perl5 script to analyse the extent to which the various functions in the `dash` and `s` packages are used by packages on MELPA. i've included the script within the org-babel block at the end of this message; i imagine there are various issues with its methodology and/or implementation, but feel it's at least a starting point. Variables at the top of the script allow it to be modified to analyse the use of libraries other than `dash` and `s`. Comments in the script describe how i built all packages locally for the script to work on. The download and build process took around 4 hours, via a cable 'net connection and a Core i5 with 4G of RAM. Running the script takes less than 10 minutes to complete on my system. --- Results --- ### ### Usage of 'dash' by MELPA packages ### 'dash' is used by 259/4506 files (5.75%). # Function usage counts, sorted by decreasing frequency Count % Function ----------------------------------------- 311 14.55 -when 299 13.99 -map 159 7.44 --map 97 4.54 -filter 91 4.26 --each 76 3.56 -each 76 3.56 --filter 74 3.46 -if 60 2.81 -contains 52 2.43 -flatten 48 2.25 --first 42 1.97 -first 36 1.68 -last 36 1.68 --remove 35 1.64 -remove 30 1.40 --when 29 1.36 -mapcat 26 1.22 -any 25 1.17 -difference 25 1.17 --reduce 24 1.12 -reduce 24 1.12 -concat 24 1.12 --any 22 1.03 -elem 22 1.03 -distinct 21 0.98 -union 17 0.80 -find 17 0.80 -all 16 0.75 -take 16 0.75 -sort 16 0.75 --if 15 0.70 -select 15 0.70 -drop 15 0.70 --mapcat 14 0.66 -partial 14 0.66 --sort 12 0.56 -let 11 0.51 -zip 11 0.51 -snoc 11 0.51 -slice 11 0.51 -partition 10 0.47 --keep 8 0.37 -repeat 8 0.37 -non 8 0.37 -min 8 0.37 --all 7 0.33 -intersection 7 0.33 -interpose 6 0.28 -keep 6 0.28 -insert 6 0.28 -dotimes 6 0.28 --group 6 0.28 --find 6 0.28 --dotimes 5 0.23 -tree 5 0.23 -list 5 0.23 --separate 4 0.19 -replace 4 0.19 -max 4 0.19 -lambda 4 0.19 --drop 3 0.14 -value 3 0.14 -iterate 3 0.14 -is 3 0.14 -group 3 0.14 --take 2 0.09 -separate 2 0.09 -interleave 2 0.09 -cons 2 0.09 -clone 2 0.09 --split 2 0.09 --last 1 0.05 -update 1 0.05 -table 1 0.05 -sum 1 0.05 -split 1 0.05 -only 1 0.05 -butlast 1 0.05 -annotate 1 0.05 --zip 1 0.05 --tree 1 0.05 --partition 1 0.05 --none 1 0.05 --max 0 0.00 -unfold 0 0.00 -splice 0 0.00 -same 0 0.00 -rotate 0 0.00 -product 0 0.00 -pad 0 0.00 -none 0 0.00 -grade 0 0.00 -fix 0 0.00 -cycle 0 0.00 -count 0 0.00 --update 0 0.00 --unfold 0 0.00 --splice 0 0.00 --only 0 0.00 --min 0 0.00 --iterate 0 0.00 --fix 0 0.00 --count 0 0.00 --annotate # Function usage counts, sorted by function name Function Count % --------------------------------------------- --all 8 0.37 --annotate 0 0.00 --any 24 1.12 --count 0 0.00 --dotimes 6 0.28 --drop 4 0.19 --each 91 4.26 --filter 76 3.56 --find 6 0.28 --first 48 2.25 --fix 0 0.00 --group 6 0.28 --if 16 0.75 --iterate 0 0.00 --keep 10 0.47 --last 2 0.09 --map 159 7.44 --mapcat 15 0.70 --max 1 0.05 --min 0 0.00 --none 1 0.05 --only 0 0.00 --partition 1 0.05 --reduce 25 1.17 --remove 36 1.68 --separate 5 0.23 --sort 14 0.66 --splice 0 0.00 --split 2 0.09 --take 3 0.14 --tree 1 0.05 --unfold 0 0.00 --update 0 0.00 --when 30 1.40 --zip 1 0.05 -all 17 0.80 -annotate 1 0.05 -any 26 1.22 -butlast 1 0.05 -clone 2 0.09 -concat 24 1.12 -cons 2 0.09 -contains 60 2.81 -count 0 0.00 -cycle 0 0.00 -difference 25 1.17 -distinct 22 1.03 -dotimes 6 0.28 -drop 15 0.70 -each 76 3.56 -elem 22 1.03 -filter 97 4.54 -find 17 0.80 -first 42 1.97 -fix 0 0.00 -flatten 52 2.43 -grade 0 0.00 -group 3 0.14 -if 74 3.46 -insert 6 0.28 -interleave 2 0.09 -interpose 7 0.33 -intersection 7 0.33 -is 3 0.14 -iterate 3 0.14 -keep 6 0.28 -lambda 4 0.19 -last 36 1.68 -let 12 0.56 -list 5 0.23 -map 299 13.99 -mapcat 29 1.36 -max 4 0.19 -min 8 0.37 -non 8 0.37 -none 0 0.00 -only 1 0.05 -pad 0 0.00 -partial 14 0.66 -partition 11 0.51 -product 0 0.00 -reduce 24 1.12 -remove 35 1.64 -repeat 8 0.37 -replace 4 0.19 -rotate 0 0.00 -same 0 0.00 -select 15 0.70 -separate 2 0.09 -slice 11 0.51 -snoc 11 0.51 -sort 16 0.75 -splice 0 0.00 -split 1 0.05 -sum 1 0.05 -table 1 0.05 -take 16 0.75 -tree 5 0.23 -unfold 0 0.00 -union 21 0.98 -update 1 0.05 -value 3 0.14 -when 311 14.55 -zip 11 0.51 # Files using 'dash', sorted by usage count Usage(s) File ----------------------------------------- 162 smartparens 108 projectile 74 prodigy 74 emr-elisp 49 origami 40 skeletor 38 flycheck 38 bog 37 clj-refactor 36 magnatune 36 js2r-functions 34 cask 33 cake2 30 turnip 29 dired-subtree 28 dired-filter 25 m-buffer 24 f 24 cider-interaction 23 workgroups2 22 malinka 22 jumblr 21 virtualenvwrapper 21 helm-bibtex 21 ecukes-run 20 wacs-interactive 20 ecukes-reporter 18 wonderland 18 sclang-doc-mode 18 anaconda-mode 17 ox-pandoc 17 commander 15 projectile-rails 15 elmacro 15 color-identifiers-mode 15 bts 13 wacs-configuration 13 omnisharp 13 fsharp-mode-completion 13 bbdb-csv-import 12 sclang-ac-mode 12 rswitcher 12 org-drill-table 12 httprepl 12 dash-functional 11 sclang-extensions-utils 11 org-trello-controller 11 nrepl-client 11 litable 11 keyset 11 ert-modeline 11 ecukes-parse 10 undercover 10 sclang-extensions 10 packed 10 org-trello-data 10 org-trello-buffer 10 helm-projectile 10 emr-c 10 emr 10 ebib-utils 10 dired-ranger 10 cider-spy 10 cask-cli 9 org-trello-proxy 9 org-transform-tree-table 8 git 8 flycheck-mercury 8 edbi-django 8 company-tern 8 color-moccur 8 cider-test 7 wrap-region 7 smart-mode-line 7 req-package 7 psci 7 eyebrowse 7 ecukes-helpers 7 dired-hacks-utils 7 creds 7 cider-stacktrace 7 ansi 6 soundklaus 6 quickref 6 paradox 6 nvm 6 multifiles 6 markdown-toc 6 malabar-reflection 6 malabar-mode 6 evil-visual-mark-mode 6 edts-project 6 ebib 5 string-edit 5 smartparens-html 5 scala-outline-popup 5 pallet 5 orgit 5 org-trello-action 5 malabar-project 5 lxc 5 lentic-asciidoc 5 jvm-mode 5 interval-tree 5 imgix 5 helm-flycheck 5 grass-mode 5 ert-runner 5 ensime-config 5 dired-open 5 decl 5 cider 5 ag 4 with-editor 4 web 4 wacs-util 4 relative-buffers 4 org-trello-backend 4 op-export 4 navorski 4 minitest 4 malabar-import 4 js2r-helpers 4 espuds 4 esh-help 4 elwm 4 edts-xref 4 ecukes-load 4 ecukes-cli 4 ecukes 4 clocker 3 wand 3 thumb-frm 3 tco 3 simplezen 3 shadchen 3 servant 3 rake 3 org-trello-cbx 3 omnisharp-utils 3 omnisharp-server-actions 3 omnisharp-auto-complete-actions 3 noflet 3 mustache-render 3 magma-scan 3 lentic-block 3 flycheck-haskell 3 flycheck-ert 3 emamux-ruby-test 3 cdnjs 3 camcorder 3 bibslurp 3 auto-compile 3 ace-jump-buffer 2 ycmd 2 tree-buffer 2 travis-version 2 solarized 2 rubocop 2 recompile-on-save 2 py-test 2 prosjekt 2 pip-requirements 2 outshine 2 outline-magic 2 org-trello-hash 2 misc-cmds 2 marmalade-client 2 malabar-util 2 malabar-service 2 magma-smie 2 magit-find-file 2 js2r-vars 2 js2-refactor 2 ivs-edit 2 inf-fsharp-mode 2 helm-projectile-all 2 hamlet-mode 2 grunt 2 go-projectile 2 gnomenm 2 gitlab-version 2 gitlab-ui 2 flycheck-pos-tip 2 flycheck-d-unittest 2 ensime-company 2 ensime-client 2 enh-ruby-mode 2 edts-navigate 2 ecukes-steps 2 ecukes-core 2 doremi-frm 2 date-field 2 company-anaconda 2 cider-util 2 cider-grimoire 2 cider-eldoc 1 with-namespace 1 wacs-init 1 trident-mode 1 travis-utils 1 tern-django 1 tbx2org 1 tagedit 1 sonic-pi-console 1 smartparens-config 1 serverspec 1 sclang-post-mode 1 replace-from-region 1 projmake-elmm 1 overseer 1 orglink 1 org-trello-utils 1 org-trello-setup 1 org-trello-entity 1 org-trello-api 1 org-trello 1 org-projectile 1 marcopolo-version 1 malabar-semanticdb 1 malabar-ede-maven 1 maker-mode 1 lib-requires 1 lentic-org 1 lentic 1 highlight 1 helm-gitlab 1 helm-dirset 1 helm-aws 1 helm-ad 1 flycheck-tip 1 flycheck-rust 1 flycheck-ghcmod 1 flycheck-color-mode-line 1 flycheck-cask 1 fakir 1 evm 1 eval-in-repl 1 elnode-proxy 1 edts-debug 1 edts-code 1 ecukes-template 1 ecukes-reporter-magnars 1 ecukes-hooks 1 ecukes-byte-compile 1 ebib-keywords 1 dispass 1 dired-narrow 1 datomic-snippets 1 codesearch 1 clojure-quick-repls 1 cider-client 1 cider-classpath 1 cider-apropos 1 auto-package-update 1 angular-snippets 1 amd-mode 1 aggressive-fill-paragraph 1 ac-anaconda # Files using 'dash', sorted alphabetically File Usage(s) ----------------------------------------- ac-anaconda 1 ace-jump-buffer 3 ag 5 aggressive-fill-paragraph 1 amd-mode 1 anaconda-mode 18 angular-snippets 1 ansi 7 auto-compile 3 auto-package-update 1 bbdb-csv-import 13 bibslurp 3 bog 38 bts 15 cake2 33 camcorder 3 cask 34 cask-cli 10 cdnjs 3 cider 5 cider-apropos 1 cider-classpath 1 cider-client 1 cider-eldoc 2 cider-grimoire 2 cider-interaction 24 cider-spy 10 cider-stacktrace 7 cider-test 8 cider-util 2 clj-refactor 37 clocker 4 clojure-quick-repls 1 codesearch 1 color-identifiers-mode 15 color-moccur 8 commander 17 company-anaconda 2 company-tern 8 creds 7 dash-functional 12 date-field 2 datomic-snippets 1 decl 5 dired-filter 28 dired-hacks-utils 7 dired-narrow 1 dired-open 5 dired-ranger 10 dired-subtree 29 dispass 1 doremi-frm 2 ebib 6 ebib-keywords 1 ebib-utils 10 ecukes 4 ecukes-byte-compile 1 ecukes-cli 4 ecukes-core 2 ecukes-helpers 7 ecukes-hooks 1 ecukes-load 4 ecukes-parse 11 ecukes-reporter 20 ecukes-reporter-magnars 1 ecukes-run 21 ecukes-steps 2 ecukes-template 1 edbi-django 8 edts-code 1 edts-debug 1 edts-navigate 2 edts-project 6 edts-xref 4 elmacro 15 elnode-proxy 1 elwm 4 emamux-ruby-test 3 emr 10 emr-c 10 emr-elisp 74 enh-ruby-mode 2 ensime-client 2 ensime-company 2 ensime-config 5 ert-modeline 11 ert-runner 5 esh-help 4 espuds 4 eval-in-repl 1 evil-visual-mark-mode 6 evm 1 eyebrowse 7 f 24 fakir 1 flycheck 38 flycheck-cask 1 flycheck-color-mode-line 1 flycheck-d-unittest 2 flycheck-ert 3 flycheck-ghcmod 1 flycheck-haskell 3 flycheck-mercury 8 flycheck-pos-tip 2 flycheck-rust 1 flycheck-tip 1 fsharp-mode-completion 13 git 8 gitlab-ui 2 gitlab-version 2 gnomenm 2 go-projectile 2 grass-mode 5 grunt 2 hamlet-mode 2 helm-ad 1 helm-aws 1 helm-bibtex 21 helm-dirset 1 helm-flycheck 5 helm-gitlab 1 helm-projectile 10 helm-projectile-all 2 highlight 1 httprepl 12 imgix 5 inf-fsharp-mode 2 interval-tree 5 ivs-edit 2 js2-refactor 2 js2r-functions 36 js2r-helpers 4 js2r-vars 2 jumblr 22 jvm-mode 5 keyset 11 lentic 1 lentic-asciidoc 5 lentic-block 3 lentic-org 1 lib-requires 1 litable 11 lxc 5 m-buffer 25 magit-find-file 2 magma-scan 3 magma-smie 2 magnatune 36 maker-mode 1 malabar-ede-maven 1 malabar-import 4 malabar-mode 6 malabar-project 5 malabar-reflection 6 malabar-semanticdb 1 malabar-service 2 malabar-util 2 malinka 22 marcopolo-version 1 markdown-toc 6 marmalade-client 2 minitest 4 misc-cmds 2 multifiles 6 mustache-render 3 navorski 4 noflet 3 nrepl-client 11 nvm 6 omnisharp 13 omnisharp-auto-complete-actions 3 omnisharp-server-actions 3 omnisharp-utils 3 op-export 4 org-drill-table 12 org-projectile 1 org-transform-tree-table 9 org-trello 1 org-trello-action 5 org-trello-api 1 org-trello-backend 4 org-trello-buffer 10 org-trello-cbx 3 org-trello-controller 11 org-trello-data 10 org-trello-entity 1 org-trello-hash 2 org-trello-proxy 9 org-trello-setup 1 org-trello-utils 1 orgit 5 orglink 1 origami 49 outline-magic 2 outshine 2 overseer 1 ox-pandoc 17 packed 10 pallet 5 paradox 6 pip-requirements 2 prodigy 74 projectile 108 projectile-rails 15 projmake-elmm 1 prosjekt 2 psci 7 py-test 2 quickref 6 rake 3 recompile-on-save 2 relative-buffers 4 replace-from-region 1 req-package 7 rswitcher 12 rubocop 2 scala-outline-popup 5 sclang-ac-mode 12 sclang-doc-mode 18 sclang-extensions 10 sclang-extensions-utils 11 sclang-post-mode 1 servant 3 serverspec 1 shadchen 3 simplezen 3 skeletor 40 smart-mode-line 7 smartparens 162 smartparens-config 1 smartparens-html 5 solarized 2 sonic-pi-console 1 soundklaus 6 string-edit 5 tagedit 1 tbx2org 1 tco 3 tern-django 1 thumb-frm 3 travis-utils 1 travis-version 2 tree-buffer 2 trident-mode 1 turnip 30 undercover 10 virtualenvwrapper 21 wacs-configuration 13 wacs-init 1 wacs-interactive 20 wacs-util 4 wand 3 web 4 with-editor 4 with-namespace 1 wonderland 18 workgroups2 23 wrap-region 7 ycmd 2 ### End ### ### Usage of 's' by MELPA packages ### 's' is used by 161/4506 files (3.57%). # Function usage counts, sorted by decreasing frequency Count % Function ----------------------------------------- 134 12.97 s-match 130 12.58 s-join 100 9.68 s-concat 84 8.13 s-split 77 7.45 s-matches 70 6.78 s-trim 67 6.49 s-starts 58 5.61 s-blank 55 5.32 s-chop 43 4.16 s-equals 36 3.48 s-replace 33 3.19 s-ends 23 2.23 s-contains 15 1.45 s-lines 13 1.26 s-format 11 1.06 s-prepend 11 1.06 s-append 9 0.87 s-repeat 9 0.87 s-lex 6 0.58 s-chomp 5 0.48 s-index 5 0.48 s-downcase 4 0.39 s-truncate 4 0.39 s-present 4 0.39 s-numeric 3 0.29 s-word 3 0.29 s-slice 3 0.29 s-shared 2 0.19 s-with 2 0.19 s-upcase 2 0.19 s-right 2 0.19 s-pad 2 0.19 s-lower 2 0.19 s-left 2 0.19 s-dashed 1 0.10 s-upper 1 0.10 s-snake 1 0.10 s-presence 1 0.10 s-capitalize 0 0.00 s-wrap 0 0.00 s-uppercase 0 0.00 s-titleized 0 0.00 s-titleize 0 0.00 s-reverse 0 0.00 s-mixedcase 0 0.00 s-lowercase 0 0.00 s-less 0 0.00 s-count 0 0.00 s-collapse 0 0.00 s-center 0 0.00 s-capitalized 0 0.00 s--truthy 0 0.00 s--mapcar 0 0.00 s--aget # Function usage counts, sorted by function name Function Count % --------------------------------------------- s--aget 0 0.00 s--mapcar 0 0.00 s--truthy 0 0.00 s-append 11 1.06 s-blank 58 5.61 s-capitalize 1 0.10 s-capitalized 0 0.00 s-center 0 0.00 s-chomp 6 0.58 s-chop 55 5.32 s-collapse 0 0.00 s-concat 100 9.68 s-contains 23 2.23 s-count 0 0.00 s-dashed 2 0.19 s-downcase 5 0.48 s-ends 33 3.19 s-equals 43 4.16 s-format 13 1.26 s-index 5 0.48 s-join 130 12.58 s-left 2 0.19 s-less 0 0.00 s-lex 9 0.87 s-lines 15 1.45 s-lower 2 0.19 s-lowercase 0 0.00 s-match 134 12.97 s-matches 77 7.45 s-mixedcase 0 0.00 s-numeric 4 0.39 s-pad 2 0.19 s-prepend 11 1.06 s-presence 1 0.10 s-present 4 0.39 s-repeat 9 0.87 s-replace 36 3.48 s-reverse 0 0.00 s-right 2 0.19 s-shared 3 0.29 s-slice 3 0.29 s-snake 1 0.10 s-split 84 8.13 s-starts 67 6.49 s-titleize 0 0.00 s-titleized 0 0.00 s-trim 70 6.78 s-truncate 4 0.39 s-upcase 2 0.19 s-upper 1 0.10 s-uppercase 0 0.00 s-with 2 0.19 s-word 3 0.29 s-wrap 0 0.00 # Files using 's', sorted by usage count Usage(s) File ----------------------------------------- 70 clj-refactor 35 sclang-extensions-utils 35 projectile 32 malinka 32 ecukes-parse 31 emr-elisp 27 projectile-rails 27 commander 26 skeletor 26 list-packages-ext 24 helm-bibtex 22 turnip 20 cake2 18 weechat 18 sclang-ac-mode 18 melpa-upstream-visit 17 ecukes-reporter 16 fsharp-mode-completion 16 fountain-mode 15 virtualenvwrapper 14 prodigy 14 emr 13 sphinx-doc 13 mustache-lex 12 simplezen 10 soundklaus 10 org-trello-data 10 nvm 10 gotest 9 magnatune 9 magit-gh-pulls 9 httprepl 9 flycheck-mercury 9 espuds 9 ert-runner 9 emamux-ruby-test 8 sclang-post-mode 8 ecukes-run 7 weechat-relay 7 phpunit 7 org-trello-cbx 7 mustache-render 7 git 7 elmacro 7 cerbere-phpunit 6 web 6 org-drill-table 6 ecukes-cli 6 bibslurp 5 timesheet 5 marcopolo-utils 5 maker-mode 5 jumblr 5 ecukes 5 cask-cli 5 bts 5 ag 4 weechat-image 4 weechat-color 4 show-css 4 relative-buffers 4 mustache-parse 4 maven-test-mode 4 marcopolo-registry 4 imgix 4 helm-gitlab 4 helm-dirset 4 gradle-mode 4 f 4 emr-scheme 4 emr-c 4 cerbere-gotest 3 weechat-corrector 3 weechat-button 3 travis-utils 3 tagedit 3 sclang-doc-mode 3 psci 3 password-store 3 markdown-toc 3 marcopolo-mode 3 elmine 3 ecukes-steps 3 ecukes-load 3 crm-custom 3 company-ycmd 3 cake-inflector 3 buffer-combine 3 angular-snippets 2 weechat-tracking 2 weechat-spelling 2 weechat-cmd 2 wand 2 serverspec 2 s-buffer 2 org-trello-proxy 2 org-trello-buffer 2 navorski 2 marcopolo-hub 2 magma-interactive 2 helm-github-stars 2 hamlet-mode 2 goto-gem 2 gitlab-utils 2 gitlab-issues 2 gitlab-groups 2 fsharp-mode 2 ert-modeline 2 ensime-company 2 elnode-proxy 2 edbi-django 2 ecukes-reporter-landing 2 ecukes-core 2 company-tern 2 ansible 2 amd-mode 1 weechat-core 1 travis-repos 1 travis-mode 1 travis-builds 1 tbx2org 1 stock-ticker 1 signature-display 1 signature-backend 1 shelldoc 1 quickref 1 pallet 1 org-trello-utils 1 org-trello-setup 1 org-transform-tree-table 1 livid-mode 1 kurecolor 1 js2r-helpers 1 js2r-conditionals 1 http 1 hookify 1 helm-project-persist 1 helm-bm 1 helm-backup 1 gnomenm 1 gitlab-session 1 gitlab-projects 1 flycheck-tip 1 eyuml 1 evm 1 ensime-vars 1 ensime-mode 1 emr-prog 1 emr-lisp 1 elnode 1 ecukes-template 1 ecukes-reporter-progress 1 ecukes-new 1 ecukes-helpers 1 ecukes-def 1 eclim-completion 1 dollaro 1 dired-filter 1 creds 1 company-edbi 1 anaconda-mode # Files using 's', sorted alphabetically File Usage(s) ----------------------------------------- ag 5 amd-mode 2 anaconda-mode 1 angular-snippets 3 ansible 2 bibslurp 6 bts 5 buffer-combine 3 cake-inflector 3 cake2 20 cask-cli 5 cerbere-gotest 4 cerbere-phpunit 7 clj-refactor 70 commander 27 company-edbi 1 company-tern 2 company-ycmd 3 creds 1 crm-custom 3 dired-filter 1 dollaro 1 eclim-completion 1 ecukes 5 ecukes-cli 6 ecukes-core 2 ecukes-def 1 ecukes-helpers 1 ecukes-load 3 ecukes-new 1 ecukes-parse 32 ecukes-reporter 17 ecukes-reporter-landing 2 ecukes-reporter-progress 1 ecukes-run 8 ecukes-steps 3 ecukes-template 1 edbi-django 2 elmacro 7 elmine 3 elnode 1 elnode-proxy 2 emamux-ruby-test 9 emr 14 emr-c 4 emr-elisp 31 emr-lisp 1 emr-prog 1 emr-scheme 4 ensime-company 2 ensime-mode 1 ensime-vars 1 ert-modeline 2 ert-runner 9 espuds 9 evm 1 eyuml 1 f 4 flycheck-mercury 9 flycheck-tip 1 fountain-mode 16 fsharp-mode 2 fsharp-mode-completion 16 git 7 gitlab-groups 2 gitlab-issues 2 gitlab-projects 1 gitlab-session 1 gitlab-utils 2 gnomenm 1 gotest 10 goto-gem 2 gradle-mode 4 hamlet-mode 2 helm-backup 1 helm-bibtex 24 helm-bm 1 helm-dirset 4 helm-github-stars 2 helm-gitlab 4 helm-project-persist 1 hookify 1 http 1 httprepl 9 imgix 4 js2r-conditionals 1 js2r-helpers 1 jumblr 5 kurecolor 1 list-packages-ext 26 livid-mode 1 magit-gh-pulls 9 magma-interactive 2 magnatune 9 maker-mode 5 malinka 32 marcopolo-hub 2 marcopolo-mode 3 marcopolo-registry 4 marcopolo-utils 5 markdown-toc 3 maven-test-mode 4 melpa-upstream-visit 18 mustache-lex 13 mustache-parse 4 mustache-render 7 navorski 2 nvm 10 org-drill-table 6 org-transform-tree-table 1 org-trello-buffer 2 org-trello-cbx 7 org-trello-data 10 org-trello-proxy 2 org-trello-setup 1 org-trello-utils 1 pallet 1 password-store 3 phpunit 7 prodigy 14 projectile 35 projectile-rails 27 psci 3 quickref 1 relative-buffers 4 s-buffer 2 sclang-ac-mode 18 sclang-doc-mode 3 sclang-extensions-utils 35 sclang-post-mode 8 serverspec 2 shelldoc 1 show-css 4 signature-backend 1 signature-display 1 simplezen 12 skeletor 26 soundklaus 10 sphinx-doc 13 stock-ticker 1 tagedit 3 tbx2org 1 timesheet 5 travis-builds 1 travis-mode 1 travis-repos 1 travis-utils 3 turnip 22 virtualenvwrapper 15 wand 2 web 6 weechat 18 weechat-button 3 weechat-cmd 2 weechat-color 4 weechat-core 1 weechat-corrector 3 weechat-image 4 weechat-relay 7 weechat-spelling 2 weechat-tracking 2 ### End --- End results --- #+begin_src perl #!/usr/bin/perl ### # # The following script assumes the following commands have been # run from a shell: # # $ git clone https://github.com/milkypostman/melpa # $ cd melpa # $ make all # $ cd packages # $ for i in *.tar; do tar xf $i; done # # The library being analysed is specified via # the $util_package_name and $util_package_prefix # variables. # # The value of $elpa_dir will probably need to be # modified to reflect the location of the # melpa/packages directory on your system. # ### use strict; use warnings; use English; use File::Find; # -- Initialisations -- # Variables which can be set by the user. my $elpa_dir = $ENV{HOME} . '/src/github/melpa/packages/'; my $util_package_name = 'dash'; # We can't simply generate this from $util_package_name # because it would break on (at least) dash.el. my $util_package_prefix = '-'; # Internal variables. my $all_function_occurences = 0; my $all_usage_occurences = 0; my $count; my $dh; my $fh; my $func; my $package_count = 0; my $package_element; my $percentage; my $usage_percentage = 0; my @funcs_by_frequency; my @funcs_by_name; my @package_elements_by_usage_frequency; my @package_elements_by_name; my @packages; my %files_using_util_package; my %usages; my %util_package_functions; # -- Helper functions. -- sub extract_util_package_functions { if (/^${util_package_name}(-\d{8}\.\d+)?\.el$/) { my $f = $File::Find::name; open($fh, '<', $f) || die "Couldn't open $f: $!"; while (<$fh>) { if (/\(defun (${util_package_prefix}-?[[:alnum:]]+)/ || /\(defmacro (${util_package_prefix}-?[[:alnum:]]+)/) { $util_package_functions{$1} = 0; } } } } sub analyse_functions_usage { if (/^([-[:alnum:]]+)(?:-\d{8}\.\d+)?\.el$/) { my $package_element = $1; my $filename = $_; if ($package_element =~ /-pkg/) { return; } if ($filename =~ /^${util_package_name}-\d{8}\.\d+\.el$/) { return; } push @packages, $package_element; $package_count++; print "Analysing $package_element ....

"; open($fh, '<', $File::Find::name) || die "Couldn't open $File::Find::name: $!"; while (<$fh>) { for my $key (keys %util_package_functions) { if (/\(${key}/) { $util_package_functions{$key}++; $usages{$package_element}++; } } } close $fh || die "Couldn't close $File::Find::name: $!"; } } # -- Processing -- find(\&extract_util_package_functions, ($elpa_dir)); finddepth(\&analyse_functions_usage, ($elpa_dir)); # -- Calculations -- $all_usage_occurences = scalar(keys %usages); $usage_percentage = $all_usage_occurences / $package_count * 100; for my $key (keys %util_package_functions) { $all_function_occurences += $util_package_functions{$key}; } for $func (sort keys %util_package_functions) { $count = sprintf("%3u", $util_package_functions{$func}); $percentage = sprintf('%2.2f', ($util_package_functions{$func} / $all_function_occurences * 100)); push @funcs_by_frequency, $count . "\t" . $percentage . "\t" . $func; push @funcs_by_name, $func . "\t" . $count . "\t" . $percentage; } for $package_element (sort keys %usages) { $count = sprintf("%3u", $usages{$package_element}); push @package_elements_by_usage_frequency, $count . "\t" . $package_element; push @package_elements_by_name, $package_element . "\t" . $count; } # -- Results -- $FORMAT_LINES_PER_PAGE = 999; $OUTPUT_AUTOFLUSH = 1; print "

"; print "###

"; print "### Usage of '$util_package_name' by MELPA packages

"; print "###



"; print "'$util_package_name' is used by ${all_usage_occurences}/${package_count} files (" . sprintf("%2.2f", $usage_percentage) . "%).





"; print "# Function usage counts, sorted by decreasing frequency



"; format Frequency_top = Count % Function ----------------------------------------- . format Frequency = @### @##.## @<<<<<<<<<<<<<<<<<<<< $count, $percentage, $func . $FORMAT_LINES_LEFT = 0; $FORMAT_TOP_NAME = 'Frequency_top'; $FORMAT_NAME = 'Frequency'; for my $elt (reverse sort @funcs_by_frequency) { ($count, $percentage, $func) = split('\t', $elt); write; } print "



"; print "# Function usage counts, sorted by function name



"; format Name_top = Function Count % --------------------------------------------- . format Name = @<<<<<<<<<<<<<<<<<<<<<<<< @### @##.## $func, $count, $percentage . $FORMAT_LINES_LEFT = 0; $FORMAT_TOP_NAME = 'Name_top'; $FORMAT_NAME = 'Name'; for my $elt (sort @funcs_by_name) { ($func, $count, $percentage) = split('\t', $elt); write; } print "



"; print "# Files using '$util_package_name', sorted by usage count



"; format File_usages_count_top = Usage(s) File ----------------------------------------- . format File_usages_count = @### @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $count, $package_element . $FORMAT_LINES_LEFT = 0; $FORMAT_TOP_NAME = 'File_usages_count_top'; $FORMAT_NAME = 'File_usages_count'; for my $elt (reverse sort @package_elements_by_usage_frequency) { ($count, $package_element) = split('\t', $elt); write; } print "



"; print "# Files using '$util_package_name', sorted alphabetically



"; format File_usages_alphabetically_top = File Usage(s) ----------------------------------------- . format File_usages_alphabetically = @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @## $package_element, $count . $FORMAT_LINES_LEFT = 0; $FORMAT_TOP_NAME = 'File_usages_alphabetically_top'; $FORMAT_NAME = 'File_usages_alphabetically'; for my $elt (sort @package_elements_by_name) { ($package_element, $count) = split('\t', $elt); write; } print "



"; print "### End



"; #+end_src Alexis.

reply via email to

