Function: haskell-cabal-find-or-create-source-file

haskell-cabal-find-or-create-source-file is an interactive and natively compiled function defined in haskell-cabal.el.

Signature

(haskell-cabal-find-or-create-source-file)

Documentation

Open the source file this line refers to.

Key Bindings

haskell-cabal-mode-map C-c C-f

Source Code

;; Defined in /nix/store/9lz2mhw95f9fqxr9mnq46k3f6qz3aq83-emacs-packages-deps/share/emacs/site-lisp/elpa/haskell-mode-20260904.1042/haskell-cabal.el
(defun haskell-cabal-find-or-create-source-file ()
  "Open the source file this line refers to."
  (interactive)
  (let* ((src-dirs (append (haskell-cabal-subsection-entry-list
                            (haskell-cabal-section) "hs-source-dirs")
                           '("")))
         (base-dir (file-name-directory (buffer-file-name)))
         (filename (haskell-cabal-line-filename)))
    (when filename
      (let ((candidates
             (delq nil (mapcar
                        (lambda (dir)
                          (let ((file (haskell-cabal-join-paths base-dir
                                                                dir
                                                                filename)))
                            (when (and (file-readable-p file)
                                       (not (file-directory-p file)))
                              file)))
                        src-dirs))))
        (if (null candidates)
            (unwind-protect
                (progn
                  (haskell-mode-toggle-interactive-prompt-state)
                  (let* ((src-dir
                          (haskell-cabal-join-paths base-dir
                                                    (or (car src-dirs) "")))
                         (newfile (haskell-cabal-join-paths src-dir filename))
                         (do-create-p (y-or-n-p (format "Create file %s ?" newfile))))
                    (when do-create-p
                      (find-file-other-window newfile ))))
              (haskell-mode-toggle-interactive-prompt-state t))
          (find-file-other-window (car candidates)))))))