From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Alexis Newsgroups: gmane.emacs.devel Subject: Use of `dash` and `s` functions by MELPA packages Date: Tue, 27 Jan 2015 20:13:07 +1100 Message-ID: <87r3uga8nw.fsf@gmail.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1422350030 12768 80.91.229.3 (27 Jan 2015 09:13:50 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 27 Jan 2015 09:13:50 +0000 (UTC) To: emacs-devel Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Jan 27 10:13:49 2015 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1YG2DN-0001Qu-4o for ged-emacs-devel@m.gmane.org; Tue, 27 Jan 2015 10:13:41 +0100 Original-Received: from localhost ([::1]:45922 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YG2DM-00012G-Hd for ged-emacs-devel@m.gmane.org; Tue, 27 Jan 2015 04:13:40 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:41078) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YG2D2-00012B-Od for emacs-devel@gnu.org; Tue, 27 Jan 2015 04:13:24 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YG2Cz-0002d2-5a for emacs-devel@gnu.org; Tue, 27 Jan 2015 04:13:20 -0500 Original-Received: from mail-pd0-x234.google.com ([2607:f8b0:400e:c02::234]:38455) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YG2Cy-0002bj-HP for emacs-devel@gnu.org; Tue, 27 Jan 2015 04:13:17 -0500 Original-Received: by mail-pd0-f180.google.com with SMTP id ft15so17709178pdb.11 for ; Tue, 27 Jan 2015 01:13:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id:mime-version:content-type; bh=6r0p1Q7+QpclCrwPx1lF6KHHRwzI3NhSFrqM8RBl5ds=; b=YIB1CiWvVYfhJPnJImeok8QdaygPqiBfuKDtX8k3Af5t3N7XF4JH8SDmxJR5qQcorv 82wZOveTy4qRem+YKle7IOu3H0tr1CPk+MuW74+W6WTHSAe8lAaNW9c/myRQCxKZFZvJ 5ri7YnoHSaQe+dRJAbmyOn4/pRMYY8gj+Jq1FTNPzV6JAfLWEuT+G5cFx9J2ne8AAse1 PgRyDE6Noq7wuIb8KU5xu3eXbzJ4Fs+vfy+cw4NfsuBLyQADk/IKnTUmU5zpe9Ilkfxt ocwWbkx+hoJmX+4pNlNlhZLdQv59zAXiHVVeqlosoQgdkWIeTnA2z1OMpZhUOBe1Zz9t Z6DA== X-Received: by 10.68.65.16 with SMTP id t16mr52385pbs.163.1422349995103; Tue, 27 Jan 2015 01:13:15 -0800 (PST) Original-Received: from localhost (ppp118-209-63-224.lns20.mel4.internode.on.net. [118.209.63.224]) by mx.google.com with ESMTPSA id zr4sm948259pbb.18.2015.01.27.01.13.11 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Tue, 27 Jan 2015 01:13:13 -0800 (PST) X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:400e:c02::234 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:181828 Archived-At: 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 ....\n"; 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 "\n"; print "###\n"; print "### Usage of '$util_package_name' by MELPA packages\n"; print "###\n\n"; print "'$util_package_name' is used by ${all_usage_occurences}/${package_count} files (" . sprintf("%2.2f", $usage_percentage) . "%).\n\n\n"; print "# Function usage counts, sorted by decreasing frequency\n\n"; 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 "\n\n"; print "# Function usage counts, sorted by function name\n\n"; 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 "\n\n"; print "# Files using '$util_package_name', sorted by usage count\n\n"; 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 "\n\n"; print "# Files using '$util_package_name', sorted alphabetically\n\n"; 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 "\n\n"; print "### End\n\n"; #+end_src Alexis.