Subject: bug#18014: 24.3; Unused Lexical argument warning, when argument is used in a function...

From: Matthew Fidler <[email-masked]>
Date: Mon, 14 Jul 2014 07:25:56 -0500

I'm getting a warning  for ergoemacs-translate:

Compiling file
e:/EmacsPortable.App/Data/src/ergoemacs-mode/ergoemacs-translate.el at Mon
Jul 14 07:17:14 2014
ergoemacs-translate.el:695:1:Warning: Unused lexical argument `key'

I do use the argument key to calculate the translation, but the compiler
claims I am not.  I'm not sure if it is a bug in the warning or a bug in
my code.  For now, I can change key to _key to ignore the warning, but I
do think that this is an invalid warning.

Here is the offending function:

(defun ergoemacs-translate (key)
  "Translates KEY and returns a plist of the translations.

:shift-translated
    S-a    -> a
    M-S-a  -> M-a
    C-S-a  -> C-a
    Anything without shift is nil.

All other translations are defined in `ergoemacs-translations'.

There are also :XXX-key and :XXX-pretty for actual key-strokes
and `ergoemacs-pretty-key' descriptions.

"
  (let* ((ret (gethash key ergoemacs-translate-hash))
         (orig-key (or (and (stringp key) key) (key-description key)))
         case-fold-search
         only-key
         shift-translated
         (ergoemacs-use-ergoemacs-key-descriptions t)
         shifted-key
         unshifted-key)
    (if ret ret
      (cond
       ((string-match "\\(^<.+>$\\|SPC\\|DEL\\|ESC\\|RET\\|TAB\\)" key)
        (setq only-key (replace-regexp-in-string "[CMS]-" "" key t))
        (if (string-match "S-" key)
            (setq shifted-key (replace-match "" t nil key))
          (setq shifted-key (concat "S-" key))))
       (t
        (setq only-key (replace-regexp-in-string "^.*\\(.\\)$" "\\1" key t)
              shifted-key (assoc only-key ergoemacs-shifted-assoc))
        (when shifted-key
          (setq shifted-key (cdr shifted-key)))))
      (when (and (string-match "\\([A-Z]\\)$" key)
                 (not (string-match
"\\<\\(SPC\\|DEL\\|ESC\\|RET\\|TAB\\)\\>" key)))
        (setq key
              (replace-match
               (concat "S-" (downcase (match-string 1 key))) t t key)))
      (when shifted-key
        (setq unshifted-key only-key)
        (unless (string-match
"\\(^<.+>$\\|\\<SPC\\>\\|\\<DEL\\>\\|\\<ESC\\>\\|\\<RET\\>\\|\\<TAB\\>\\)"
shifted-key)
          (when (string-match "[A-Z]" shifted-key)
            (setq shifted-key (concat "S-" (downcase shifted-key))))
          (when (string-match "[A-Z]" unshifted-key)
            (setq unshifted-key (concat "S-" (downcase unshifted-key))))))
      (when (string-match "S-" key)
        (setq shift-translated (replace-regexp-in-string "S-" "" key t)))

      (if shift-translated
          (progn
            (setq ret (plist-put ret ':shift-translated
(ergoemacs-translate-shifted shift-translated)))
            (setq ret (plist-put ret ':shift-translated-key (read-kbd-macro
(ergoemacs-translate-shifted shift-translated) t)))
            (setq ret (plist-put ret ':shift-translated-pretty
(ergoemacs-pretty-key shift-translated))))
        (setq ret (plist-put ret ':shift-translated nil))
        (setq ret (plist-put ret ':shift-translated-key nil))
        (setq ret (plist-put ret ':shift-translated-pretty nil)))

      (when shifted-key
        (setq ret (plist-put ret ':shifted (ergoemacs-translate-shifted
shifted-key)))
        (setq ret (plist-put ret ':shifted-key (read-kbd-macro
(ergoemacs-translate-shifted shifted-key) t)))
        (setq ret (plist-put ret ':shifted-pretty (ergoemacs-pretty-key
shifted-key))))
      (when unshifted-key
        (setq ret (plist-put ret ':unshifted (ergoemacs-translate-shifted
unshifted-key)))
        (setq ret (plist-put ret ':unshifted-key (read-kbd-macro
(ergoemacs-translate-shifted unshifted-key) t)))
        (setq ret (plist-put ret ':unshifted-pretty (ergoemacs-pretty-key
unshifted-key))))
      (setq ret (plist-put ret ':ctl (ergoemacs-translate-shifted
                                      (concat "C-" unshifted-key))))
      (setq ret (plist-put ret ':ctl-key (read-kbd-macro (plist-get ret
':ctl) t)))
      (setq ret (plist-put ret ':ctl-pretty (ergoemacs-pretty-key
(plist-get ret ':ctl))))

      (setq ret (plist-put ret ':raw (ergoemacs-translate-shifted
                                      (replace-regexp-in-string
                                       "\\<[CSMS]-" "" key))))
      (setq ret (plist-put ret ':raw-key  (read-kbd-macro (plist-get ret
':raw) t)))
      (setq ret (plist-put ret ':raw-pretty (ergoemacs-pretty-key
                                             (plist-get ret ':raw))))
      (if (assoc (plist-get ret ':raw) ergoemacs-shifted-assoc)
          (progn
            (setq ret (plist-put ret ':raw-shift
                                 (ergoemacs-translate-shifted
                                  (replace-regexp-in-string
                                   "\\<[CSM]-" ""
                                   (cdr (assoc (plist-get ret ':raw)
ergoemacs-shifted-assoc))))))
            (setq ret (plist-put ret ':raw-shift-key
                                 (read-kbd-macro (plist-get ret
':raw-shift) t)))
            (setq ret (plist-put ret ':raw-shift-pretty
                                 (ergoemacs-pretty-key
                                  (plist-get ret ':raw-shift)))))
        (setq ret (plist-put ret ':raw-shift nil))
        (setq ret (plist-put ret ':raw-shift-key nil))
        (setq ret (plist-put ret ':raw-shift-pretty nil)))

      (setq ret (plist-put ret ':alt (ergoemacs-translate-shifted
                                      (concat "M-" unshifted-key))))
      (setq ret (plist-put ret ':alt-key (read-kbd-macro (plist-get ret
':alt) t)))
      (setq ret (plist-put ret ':alt-pretty (ergoemacs-pretty-key
(plist-get ret ':alt))))

      (when unshifted-key
        (setq ret (plist-put ret ':alt-ctl (ergoemacs-translate-shifted
                                            (concat "M-C-" unshifted-key))))
        (setq ret (plist-put ret ':alt-ctl-key (read-kbd-macro (plist-get
ret ':alt-ctl) t)))
        (setq ret (plist-put ret ':alt-ctl-pretty (ergoemacs-pretty-key
(plist-get ret ':alt-ctl)))))

      (when shifted-key
        (setq ret (plist-put ret ':ctl-shift (ergoemacs-translate-shifted
                                              (concat "C-" shifted-key))))
        (setq ret (plist-put ret ':ctl-shift-key (read-kbd-macro (plist-get
ret ':ctl-shift) t)))
        (setq ret (plist-put ret ':ctl-shift-pretty (ergoemacs-pretty-key
(plist-get ret ':ctl-shift))))
        (setq ret (plist-put ret ':alt-shift (ergoemacs-translate-shifted
                                              (concat "M-" shifted-key))))
        (setq ret (plist-put ret ':alt-shift-key (read-kbd-macro (plist-get
ret ':alt-shift) t)))
        (setq ret (plist-put ret ':alt-shift-pretty (ergoemacs-pretty-key
(plist-get ret ':alt-shift))))
        (setq ret (plist-put ret ':alt-ctl-shift
(ergoemacs-translate-shifted
                                                  (concat "M-C-"
shifted-key))))
        (setq ret (plist-put ret ':alt-ctl-shift-key (read-kbd-macro
(plist-get ret ':alt-ctl-shift) t)))
        (setq ret (plist-put ret ':alt-ctl-shift-pretty
(ergoemacs-pretty-key (plist-get ret ':alt-ctl-shift)))))
      (maphash
       (lambda(key plist)
         (setq ret (ergoemacs-translation-install plist orig-key ret)))
       ergoemacs-translations)
      (puthash orig-key ret ergoemacs-translate-hash)
      (puthash key ret ergoemacs-translate-hash)
      ret)))

In GNU Emacs 24.3.1 (i386-mingw-nt6.1.7601)
 of 2013-03-17 on MARVIN
Windowing system distributor `Microsoft Corp.', version 6.1.7601
Configured using:
 `configure --with-gcc (4.7) --cflags
 -ID:/devel/emacs/libs/libXpm-3.5.8/include
 -ID:/devel/emacs/libs/libXpm-3.5.8/src
 -ID:/devel/emacs/libs/libpng-dev_1.4.3-1/include
 -ID:/devel/emacs/libs/zlib-dev_1.2.5-2/include
 -ID:/devel/emacs/libs/giflib-4.1.4-1/include
 -ID:/devel/emacs/libs/jpeg-6b-4/include
 -ID:/devel/emacs/libs/tiff-3.8.2-1/include
 -ID:/devel/emacs/libs/gnutls-3.0.9/include
 -ID:/devel/emacs/libs/libiconv-1.13.1-1-dev/include
 -ID:/devel/emacs/libs/libxml2-2.7.8/include/libxml2'

Important settings:
  value of $EMACSDATA:
C:\Users\fidlema3\EmacsPortable.App\App\eps\..\emacs-24.3\etc
  value of $EMACSDOC:
C:\Users\fidlema3\EmacsPortable.App\App\eps\..\emacs-24.3\etc
  value of $EMACSLOADPATH:
C:\Users\fidlema3\EmacsPortable.App\App\eps\..\site-lisp;C:\Users\fidlema3\EmacsPortable.App\App\eps\..\emacs-24.3\lisp
  value of $LANG: en
  locale-coding-system: cp1252
  default enable-multibyte-characters: t

Major mode: Emacs-Lisp

Minor modes in effect:
  eldoc-mode: t
  rainbow-mode: t
  show-paren-mode: t
  golden-ratio-mode: t
  keyfreq-autosave-mode: t
  keyfreq-mode: t
  Info-breadcrumbs-in-mode-line-mode: t
  tabbar-mwheel-mode: t
  tabbar-mode: t
  savehist-mode: t
  global-linum-mode: t
  linum-mode: t
  global-subword-mode: t
  subword-mode: t
  yas-global-mode: t
  yas-minor-mode: t
  ido-ubiquitous-mode: t
  global-auto-complete-mode: t
  auto-complete-mode: t
  auto-indent-global-mode: t
  auto-indent-mode: t
  smartparens-global-mode: t
  smartparens-mode: t
  helm-mode: t
  helm-match-plugin-mode: t
  helm-occur-match-plugin-mode: t
  delete-selection-mode: t
  ergoemacs-mode: t
  global-undo-tree-mode: t
  undo-tree-mode: t
  ido-everywhere: t
  shell-dirtrack-mode: t
  flyspell-mode: t
  recentf-mode: t
  tooltip-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  auto-fill-function: do-auto-fill
  transient-mark-mode: t

Recent input:
<down-mouse-1> <drag-mouse-1> <down-mouse-1> <mouse-1>
M-3 <apps> g e r r g o e m a c s - t h e m e - <return>
<apps> y e r g o e m a c s - t r a n <return> <help-echo>
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo>
<help-echo> <menu-bar> <emacs-lisp> <byte-compile>
<help-echo> <down-mouse-1> <mouse-1> <help-echo> <help-echo>
<down-mouse-1> <mouse-2> <wheel-down> <wheel-down>
<wheel-down> <down-mouse-1> <mouse-1> M-u M-j o r i
M-e M-e M-e M-e M-e M-e M-e M-e M-h o r i g - k e y
M-h M-h M-j M-j M-j M-e M-e M-e M-e M-e M-e M-e M-e
M-e M-e M-i M-i M-i M-i M-u M-. C-q ) M-e M-n M-n M-n
M-n M-n M-n M-n M-n M-n M-n M-n M-n M-n M-n C-w C-g
C-z M-u M-u M-u M-u M-u M-u M-u M-u M-u M-m M-y M-y
M-i M-8 M-8 <apps> e e a n d SPC <apps> e e s t r i
n g p SPC k e y M-i SPC M-l M-l M-l M-n M-8 <apps>
e e o r SPC M-. M-n M-n SPC <apps> e e k e y - d e
s c r i p t i o n SPC k e y M-e M-e M-e M-e M-e M-e
M-e M-e M-e M-e M-8 M-x <backspace> <apps> r <help-echo>
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo>
<help-echo> <menu-bar> <emacs-lisp> <byte-compile>
<down-mouse-1> <mouse-1> <apps> w M-r M-3 <help-echo>
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo>
<help-echo> <menu-bar> <emacs-lisp> <byte-compile>
<help-echo> <down-mouse-1> <mouse-2> <help-echo> <down-mouse-1>
<mouse-1> <down-mouse-1> <mouse-1> <down-mouse-1> <mouse-1>
<lwindow> <down-mouse-1> <mouse-1> M-SPC M-. M-c <help-echo>
<down-mouse-1> <mouse-1> <help-echo> <help-echo> <help-echo>
<menu-bar> <help-menu> <send-bug-report>

Recent messages:
Mark set
Mark saved where search started [2 times]
Quit
Type 8 to expand again, - to contract, 0 to reset [3 times]
Saving file
e:/EmacsPortable.App/Data/src/ergoemacs-mode/ergoemacs-translate.el...
Wrote e:/EmacsPortable.App/Data/src/ergoemacs-mode/ergoemacs-translate.el
Compiling
e:/EmacsPortable.App/Data/src/ergoemacs-mode/ergoemacs-translate.el...done
Wrote e:/EmacsPortable.App/Data/src/ergoemacs-mode/ergoemacs-translate.elc
Compiling
e:/EmacsPortable.App/Data/src/ergoemacs-mode/ergoemacs-translate.el...done
Wrote e:/EmacsPortable.App/Data/src/ergoemacs-mode/ergoemacs-translate.elc

Load-path shadows:
c:/Users/fidlema3/EmacsPortable.App/Data/start/EmacsMate/elpa-24.3/ess-20130628.1043/.dir-locals
hides
c:/Users/fidlema3/EmacsPortable.App/Data/start/EmacsMate/elpa-24.3/highlight-symbol-20130628.1552/.dir-locals
c:/Users/fidlema3/EmacsPortable.App/Data/start/EmacsMate/elpa-24.3/ess-20130628.1043/.dir-locals
hides
c:/Users/fidlema3/EmacsPortable.App/Data/start/EmacsMate/elpa-24.3/js2-mode-20131118.1516/.dir-locals
e:/EmacsPortable.App/Data/start/shared/init hides
c:/Users/fidlema3/EmacsPortable.App/Data/start/EmacsMate/init
c:/Users/fidlema3/EmacsPortable.App/Data/start/EmacsMate/custom hides
c:/Users/fidlema3/EmacsPortable.App/App/eps/../emacs-24.3/lisp/custom
c:/Users/fidlema3/EmacsPortable.App/Data/start/EmacsMate/elpa-24.3/ess-20130628.1043/.dir-locals
hides
c:/Users/fidlema3/EmacsPortable.App/App/emacs-24.3/lisp/gnus/.dir-locals
c:/Users/fidlema3/EmacsPortable.App/Data/start/EmacsMate/elpa-24.3/cl-lib-0.3/cl-lib
hides
c:/Users/fidlema3/EmacsPortable.App/App/emacs-24.3/lisp/emacs-lisp/cl-lib

Features:
(shadow sort mail-extr emacsbug message rfc822 mml mml-sec mm-decode
mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader
sendmail rfc2047 rfc2045 ietf-drums mail-utils expand-region
text-mode-expansions the-org-mode-expansions html-mode-expansions
er-basic-expansions expand-region-custom expand-region-core misearch
multi-isearch ergoemacs-macros image-file vc-git helm-misc
browse-kill-ring ruler-mode mule-util diminish eldoc rainbow-mode melpa
o-blog o-blog-bootstrap o-blog-i18n o-blog-grid o-blog-source
o-blog-alert time-stamp html2text sgml-mode htmlize maxframe
w32-fullscreen epshell paren golden-ratio keyfreq solarized-light-theme
solarized info+ tabbar-ruler color tabbar savehist linum-off linum
subword extend-dnd dired+ iimage ob-ditaa ob-clojure ob-haskell ob-js
ob-python ob-ruby ob-perl ob-plantuml ob-R ob-sh org-clock org-exp
ob-exp org-exp-blocks org-agenda textmate-to-yas texmate-to-yas
textmate-import texmate-import yasnippet ido-ubiquitous pos-tip
auto-complete-config auto-complete popup auto-indent-mode
smartparens-config smartparens dash helm-mode helm-files image-dired
dired-x dired-aux thingatpt helm-buffers helm-elscreen helm-tags
helm-bookmark helm-adaptative helm-info helm-net browse-url xml url
url-proxy url-privacy url-expand url-methods url-history url-cookie
url-domsuf url-util mailcap helm-plugin helm-locate helm-help
helm-match-plugin helm-grep helm-regexp grep helm-external helm-utils
dired compile helm printing ps-print ps-def lpr ergoemacs-menus delsel
ergoemacs-mode two-column ergoemacs-advices cus-edit cus-start cus-load
ergoemacs-extras ergoemacs-shortcuts ergoemacs-translate descr-text
help-mode ergoemacs-functions ergoemacs-modal ergoemacs-unbind edmacro
kmacro ergoemacs-themes ergoemacs-theme-engine eieio-base
ergoemacs-layouts undo-tree diff ess-smart-underscore ess ess-inf
ess-mode ess-noweb-mode ess-utils ess-custom executable ess-compat
ess-R-object-tooltip ac-helm-autoloads ace-jump-mode-autoloads
auctex-autoloads tex-site auto-compile-autoloads auto-complete-autoloads
auto-indent-mode-autoloads autopair-autoloads bm-autoloads
browse-kill-ring-autoloads diminish-autoloads dired+-autoloads
ergoemacs-mode-autoloads ess-smart-underscore-autoloads evil-autoloads
evil-numbers-autoloads expand-region-autoloads extend-dnd-autoloads
flx-ido-autoloads flx-autoloads fold-dwim-autoloads
golden-ratio-autoloads goto-chg-autoloads helm-autoloads help+-autoloads
highlight-symbol-autoloads htmlize-autoloads icicles-autoloads
ido-ubiquitous-autoloads ido-vertical-mode-autoloads info+-autoloads
js2-mode-autoloads finder-inf keyfreq-autoloads lacarte-autoloads
linum-off-autoloads melpa-autoloads monokai-theme-autoloads
multi-term-autoloads multiple-cursors-autoloads nsis-mode-autoloads
ntcmd-autoloads org-cua-dwim-autoloads org-outlook-autoloads org-outlook
org-protocol org-readme-autoloads lib-requires-autoloads
header2-autoloads http-post-simple-autoloads org-table-comment-autoloads
packed-autoloads magit-autoloads git-rebase-mode-autoloads
git-commit-mode-autoloads paredit-autoloads phi-search-autoloads
popup-autoloads pos-tip-autoloads powerline-autoloads powerline
powerline-separators powerline-themes projectile-autoloads
rainbow-mode-autoloads s-autoloads slime-autoloads smartparens-autoloads
dash-autoloads smex-autoloads solarized-theme-autoloads
sr-speedbar-autoloads ssh-autoloads tabbar-ruler-autoloads info
tabbar-autoloads textmate-to-yas-autoloads undo-tree-autoloads
visual-regexp-autoloads cl-lib-autoloads yaoddmuse-autoloads
yasnippet-autoloads zenburn-theme-autoloads uniquify ffap url-parse
url-vars saveplace package org warnings ob-tangle ob-ref ob-lob ob-table
org-footnote org-src ob-comint ob-keys org-pcomplete org-list org-faces
org-entities noutline outline easy-mmode org-version ob-emacs-lisp ob
org-compat org-macs ob-eval org-loaddefs find-func cal-menu calendar
cal-loaddefs ido tramp tramp-compat auth-source eieio byte-opt bytecomp
byte-compile cconv gnus-util mm-util mail-prsvr password-cache
tramp-loaddefs shell pcomplete comint ansi-color ring format-spec
flyspell rw-hunspell rw-ispell ispell rw-language-and-country-codes
server recentf tree-widget wid-edit easymenu advice help-fns
advice-preload cl-macs gv cl cl-lib time-date tooltip ediff-hook
vc-hooks lisp-float-type mwheel dos-w32 ls-lisp w32-common-fns
disp-table w32-win w32-vars tool-bar dnd fontset image regexp-opt fringe
tabulated-list newcomment lisp-mode register page menu-bar rfn-eshadow
timer select scroll-bar mouse jit-lock font-lock syntax facemenu
font-core frame cham georgian utf-8-lang misc-lang vietnamese tibetan
thai tai-viet lao korean japanese hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese case-table epa-hook
jka-cmpr-hook help simple abbrev minibuffer loaddefs button faces
cus-face macroexp files text-properties overlay sha1 md5 base64 format
env code-pages mule custom widget hashtable-print-readable backquote
make-network-process w32 multi-tty emacs)