Browse Source

Added pip-requirements-mode.el

master
Raphael Roberts 5 years ago
parent
commit
99d2b7fdaa
  1. 5
      custom.el
  2. 40
      elpa/pip-requirements-20181027.1629/pip-requirements-autoloads.el
  3. 2
      elpa/pip-requirements-20181027.1629/pip-requirements-pkg.el
  4. 176
      elpa/pip-requirements-20181027.1629/pip-requirements.el

5
custom.el

@ -116,7 +116,9 @@
("shell" . sh)
("bash" . sh)))
'(package-selected-packages
'(dired-rsync
'(meghanada
pip-requirements
dired-rsync
projectile
plantuml-mode
shift-number
@ -134,7 +136,6 @@
realgud
format-all
autodisass-java-bytecode
meghanada
elmacro
ace-window
winum

40
elpa/pip-requirements-20181027.1629/pip-requirements-autoloads.el

@ -0,0 +1,40 @@
;;; pip-requirements-autoloads.el --- automatically extracted autoloads
;;
;;; Code:
(add-to-list 'load-path (directory-file-name
(or (file-name-directory #$) (car load-path))))
;;;### (autoloads nil "pip-requirements" "pip-requirements.el" (0
;;;;;; 0 0 0))
;;; Generated autoloads from pip-requirements.el
(add-to-list 'auto-mode-alist `(,(rx ".pip" string-end) . pip-requirements-mode))
(add-to-list 'auto-mode-alist `(,(rx "requirements" (zero-or-more anything) ".txt" string-end) . pip-requirements-mode))
(add-to-list 'auto-mode-alist `(,(rx "requirements.in") . pip-requirements-mode))
(autoload 'pip-requirements-auto-complete-setup "pip-requirements" "\
Setup Auto-Complete for Pip Requirements.
See URL `https://github.com/auto-complete/auto-complete' for
information about Auto Complete." nil nil)
(autoload 'pip-requirements-mode "pip-requirements" "\
Major mode for editing pip requirements files.
\(fn)" t nil)
(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pip-requirements" '("pip-")))
;;;***
;; Local Variables:
;; version-control: never
;; no-byte-compile: t
;; no-update-autoloads: t
;; coding: utf-8
;; End:
;;; pip-requirements-autoloads.el ends here

2
elpa/pip-requirements-20181027.1629/pip-requirements-pkg.el

@ -0,0 +1,2 @@
;;; Generated package description from /home/raphael/.emacs.d/elpa/pip-requirements-20181027.1629/pip-requirements.el -*- no-byte-compile: t -*-
(define-package "pip-requirements" "20181027.1629" "A major mode for editing pip requirements files." '((dash "2.8.0")) :commit "216cd1690f80cc965d4ae47b8753fc185f778ff6" :authors '(("Wilfred Hughes" . "me@wilfred.me.uk")) :maintainer '("Wilfred Hughes" . "me@wilfred.me.uk"))

176
elpa/pip-requirements-20181027.1629/pip-requirements.el

@ -0,0 +1,176 @@
;;; pip-requirements.el --- A major mode for editing pip requirements files.
;; Copyright (C) 2014 Wilfred Hughes <me@wilfred.me.uk>
;;
;; Author: Wilfred Hughes <me@wilfred.me.uk>
;; Created: 11 September 2014
;; Version: 0.6
;; Package-Version: 20181027.1629
;; Package-Commit: 216cd1690f80cc965d4ae47b8753fc185f778ff6
;; Package-Requires: ((dash "2.8.0"))
;;; License:
;; This file is not part of GNU Emacs.
;; However, it is distributed under the same license.
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 3, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Commentary:
;; This is a major mode for editing pip requirements files, with the following features:
;; * Syntax highlighting
;; * Togglable comments
;; * Auto completion of package names from PyPI
;; TODO: Steal shamelessly all the fantasic ideas in
;; https://github.com/wuub/requirementstxt
;;; Code:
(require 'dash)
(require 'cl-lib)
(defgroup pip-requirements nil
"Requirements files for pip"
:prefix "pip-requirements-"
:group 'languages
:link '(url-link :tag "Github" "https://github.com/Wilfred/pip-requirements.el"))
(defcustom pip-requirements-mode-hook nil
"Hook to run after `pip-requirements-mode'."
:group 'pip-requirements
:type 'hook
:risky t)
(defcustom pip-requirements-index-url
"https://pypi.org/simple/"
"The URL used to fetch the list of packages used for completion."
:group 'pip-requirements
:type 'string)
;;;###autoload
(add-to-list 'auto-mode-alist
`(,(rx ".pip" string-end) . pip-requirements-mode))
;;;###autoload
(add-to-list 'auto-mode-alist
`(,(rx "requirements" (zero-or-more anything) ".txt" string-end) . pip-requirements-mode))
;;;###autoload
(add-to-list 'auto-mode-alist
`(,(rx "requirements.in") . pip-requirements-mode))
(defconst pip-requirements-name-regex
(rx
line-start
(group (1+ (or alphanumeric "-" "_" ".")))))
(defconst pip-requirements-version-regex
;; https://www.python.org/dev/peps/pep-0440/#version-specifiers
(rx
(group (or "==" ">" ">=" "<" "<=" "!=" "~="))
(group (1+ (or digit "b" "." "post" "*")))))
(defconst pip-requirements-arbitrary-version-regex
;; https://www.python.org/dev/peps/pep-0440/#arbitrary-equality
(rx (group "===") (group (1+ not-newline))))
(defconst pip-requirements-operators
(list
(list pip-requirements-name-regex 1 'font-lock-variable-name-face)
(list pip-requirements-version-regex 1 'font-lock-builtin-face)
(list pip-requirements-arbitrary-version-regex 1 'font-lock-builtin-face)
(list pip-requirements-version-regex 2 'font-lock-constant-face)
(list pip-requirements-arbitrary-version-regex 2 'font-lock-constant-face)))
(defconst pip-requirements-syntax-table
(let ((table (make-syntax-table)))
(modify-syntax-entry ?# "<" table)
(modify-syntax-entry ?\n ">" table)
(modify-syntax-entry ?> "." table)
(modify-syntax-entry ?< "." table)
(modify-syntax-entry ?= "." table)
(modify-syntax-entry ?~ "." table)
table))
(defvar pip-http-buffer nil)
(defvar pip-packages nil
"List of PyPI packages for completion.")
(defun pip-requirements-callback (&rest _)
(with-current-buffer pip-http-buffer
;; Move over the HTTP header.
(goto-char (point-min))
(re-search-forward "^$" nil 'move)
(let* ((dom (libxml-parse-html-region (point) (point-max)))
(body-tag (-last-item dom))
(body-children (cdddr body-tag))
(a-tags (--filter (eq (car-safe it) 'a) body-children)))
(setq pip-packages
;; Inner text of anchor tags.
(-map #'cl-third a-tags))))
(kill-buffer pip-http-buffer))
(defun pip-requirements-fetch-packages ()
"Get a list of all packages available on PyPI and store them in `pip-packages'.
Assumes Emacs is compiled with libxml."
(setq pip-http-buffer
(url-retrieve pip-requirements-index-url
#'pip-requirements-callback nil t)))
(defun pip-requirements-complete-at-point ()
"Complete at point in Pip Requirements Mode."
(let* ((bounds (bounds-of-thing-at-point 'symbol))
(start (or (car bounds) (point)))
(end (or (cdr bounds) (point))))
(list start end pip-packages)))
;; Declare variables from AC, to avoid a hard dependency on Auto Complete.
(defvar ac-modes)
(defvar ac-sources)
;;;###autoload
(defun pip-requirements-auto-complete-setup ()
"Setup Auto-Complete for Pip Requirements.
See URL `https://github.com/auto-complete/auto-complete' for
information about Auto Complete."
(add-to-list 'ac-modes 'pip-requirements-mode)
(add-to-list 'ac-sources '((candidates . pip-packages)))
(when (and (fboundp 'auto-complete-mode)
(not (bound-and-true-p auto-complete-mode)))
;; Enable Auto Complete
(auto-complete-mode)))
(custom-add-frequent-value 'pip-requirements-mode-hook
'pip-requirements-auto-complete-setup)
;;;###autoload
(define-derived-mode pip-requirements-mode prog-mode "pip-require"
"Major mode for editing pip requirements files."
:syntax-table pip-requirements-syntax-table
(set (make-local-variable 'font-lock-defaults) '(pip-requirements-operators))
(set (make-local-variable 'comment-start) "#")
(add-hook 'completion-at-point-functions
#'pip-requirements-complete-at-point nil 'local)
(unless pip-packages
;; Fetch the list of packages for completion
(pip-requirements-fetch-packages)))
(provide 'pip-requirements)
;;; pip-requirements.el ends here
Loading…
Cancel
Save