Subject: 30.0.50; dockerfile-ts-mode imenu issue

From: Eshel Yaron <[email-masked]>
Date: Sun, 11 Dec 2022 22:39:40 +0200

I stumbled upon the following issue while checking out the new
dockerfile-ts-mode.

1. emacs -Q
2. C-x C-f /tmp/Dockerfile
3. Insert the following contents (taken from
https://docs.docker.com/build/building/multi-stage/#use-a-previous-stage-as-a-new-stage):

    FROM ubuntu AS base
    RUN echo "base"

    FROM base AS stage1
    RUN echo "stage1"

    FROM base AS stage2
    RUN echo "stage2"

4. Try to use M-x imenu to navigate to the last build stage
4.a. We get the following imenu--index-alist:

    (("Stage"
      ("ubuntu" . #<marker at 1 in Dockerfile>)
      ("base" . #<marker at 42 in Dockerfile>)
      ("base" . #<marker at 81 in Dockerfile>)))

4.b. Consequently, we can't choose and jump to the last stage, because
dockerfile-ts-mode calls both of the last two stages by the same name
("base").

The crux of the issue is that dockerfile-ts-mode uses a stage's base
image as its name, which seems kinda wrong and leads to ambiguity since
many stages can have a common base image.  Instead, it would be
preferable IMO to use the index of the stage or, when available, its
unique name (such as "stage1" in the example above).

Thanks!

In GNU Emacs 30.0.50 (build 9, x86_64-apple-darwin22.1.0, NS
 appkit-2299.00 Version 13.0 (Build 22A380)) of 2022-12-11 built on
 esmac.lan
Repository revision: 85108d541217f0333860c4f86c3b16b4349f85a4
Repository branch: master
Windowing system distributor 'Apple', version 10.3.2299
System Description:  macOS 13.0

Configured using:
 'configure --with-native-compilation --enable-link-time-optimization
 --with-json --with-xwidgets --with-mailutils --with-imagemagick
 --without-dbus'

Configured features:
ACL GIF GLIB GMP GNUTLS IMAGEMAGICK JPEG JSON LCMS2 LIBXML2 MODULES
NATIVE_COMP NOTIFY KQUEUE NS PDUMPER PNG RSVG SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM XWIDGETS ZLIB

Important settings:
  value of $LC_CTYPE: UTF-8
  locale-coding-system: utf-8-unix

Major mode: Dockerfile

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message mailcap yank-media puny dired
dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068
epg-config gnus-util text-property-search time-date mm-decode mm-bodies
mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail
rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils pp cl-print
byte-opt help-fns radix-tree thingatpt imenu comp comp-cstr warnings
icons subr-x rx cl-macs gv cl-extra help-mode bytecomp byte-compile
dockerfile-ts-mode treesit cl-seq cl-loaddefs cl-lib rmc iso-transl
tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks
lisp-float-type elisp-mode mwheel term/ns-win ns-win ucs-normalize
mule-util term/common-win tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode lisp-mode prog-mode register
page tab-bar menu-bar rfn-eshadow isearch easymenu timer select
scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors
frame minibuffer nadvice seq simple cl-generic indonesian philippine
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese composite emoji-zwj charscript
charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure
cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp
files window text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget keymap hashtable-print-readable backquote
threads xwidget-internal kqueue cocoa ns lcms2 multi-tty
make-network-process native-compile emacs)

Memory information:
((conses 16 111634 8544)
 (symbols 48 7501 0)
 (strings 32 31342 3006)
 (string-bytes 1 961129)
 (vectors 16 23207)
 (vector-slots 8 403727 9539)
 (floats 8 60 40)
 (intervals 56 396 0)
 (buffers 984 14))