mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-23 10:34:07 +00:00
Added LINTER support.
(sql-linter-program): New variable. (sql-linter-options): New variable. (sql-mode-menu): Added Linter keywords. (sql-mode-linter-font-lock-keywords): New variable. (sql-highlight-linter-keywords): New function. (sql-linter): New function. (sql-ms-options): New variable. (sql-ms): Use it.
This commit is contained in:
parent
1fb876f665
commit
f4df536d0a
@ -1,3 +1,15 @@
|
||||
2002-11-21 Eugene Exarevsky <zheka@relex.ru>
|
||||
|
||||
* progmodes/sql.el: Added LINTER support.
|
||||
(sql-linter-program): New variable.
|
||||
(sql-linter-options): New variable.
|
||||
(sql-mode-menu): Added Linter keywords.
|
||||
(sql-mode-linter-font-lock-keywords): New variable.
|
||||
(sql-highlight-linter-keywords): New function.
|
||||
(sql-linter): New function.
|
||||
(sql-ms-options): New variable.
|
||||
(sql-ms): Use it.
|
||||
|
||||
2002-11-21 John Paul Wallington <jpw@shootybangbang.com>
|
||||
|
||||
* ibuffer.el (ibuffer-formats): Change default value; bump width
|
||||
@ -18,7 +30,7 @@
|
||||
|
||||
* subr.el (symbol-file): Remove unused variable `functions'.
|
||||
|
||||
2002-11-20 Markus Rost <rost@math.ohio-state.edu>
|
||||
2002-11-20 Markus Rost <rost@math.ohio-state.edu>
|
||||
|
||||
* Makefile.in (setwins_almost): Renamed from finder_setwins.
|
||||
(custom-deps): Use it.
|
||||
@ -44,7 +56,7 @@
|
||||
|
||||
* emacs-lisp/byte-opt.el (side-effect-free-fns): Several additions.
|
||||
|
||||
2002-11-19 Markus Rost <rost@math.ohio-state.edu>
|
||||
2002-11-19 Markus Rost <rost@math.ohio-state.edu>
|
||||
|
||||
* progmodes/vhdl-mode.el (defgroup vhdl-related): Declare the
|
||||
members here rather than with custom-add-to-group. This is the
|
||||
@ -175,7 +187,7 @@
|
||||
(calendar-mode): Set up font-lock mode.
|
||||
(generate-calendar-window): Fontify if font-lock-mode is on.
|
||||
|
||||
2002-11-16 Ivan Zakharyaschev <imz@altlinux.org> (tiny change)
|
||||
2002-11-16 Ivan Zakharyaschev <imz@altlinux.org> (tiny change)
|
||||
|
||||
* international/codepage.el (cp866-decode-table): Fix the
|
||||
translation table.
|
||||
@ -265,7 +277,7 @@
|
||||
paragraph with `fill-nobreak-invisible' let-bound to t.
|
||||
Don't use `display' property; insert "see" directly in buffer.
|
||||
|
||||
2002-11-14 Nick Roberts <nick@nick.uklinux.net>
|
||||
2002-11-14 Nick Roberts <nick@nick.uklinux.net>
|
||||
|
||||
* gdb-ui.el: New file, User Interface for running GDB
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
;;; sql.el --- specialized comint.el for SQL interpreters
|
||||
|
||||
;; Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
|
||||
;; Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Alex Schroeder <alex@gnu.org>
|
||||
;; Maintainer: Alex Schroeder <alex@gnu.org>
|
||||
;; Version: 1.6.5
|
||||
;; Version: 1.7.0
|
||||
;; Keywords: comm languages processes
|
||||
;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?SqlMode
|
||||
|
||||
@ -343,6 +343,13 @@ The program can also specify a TCP connection. See `make-comint'."
|
||||
:type 'file
|
||||
:group 'SQL)
|
||||
|
||||
(defcustom sql-ms-options '("-w" "300" "-n")
|
||||
;; -w is the linesize
|
||||
"*List of additional options for `sql-ms-program'."
|
||||
:type '(repeat string)
|
||||
:version "21.4"
|
||||
:group 'SQL)
|
||||
|
||||
;; Customization for Postgres
|
||||
|
||||
(defcustom sql-postgres-program "psql"
|
||||
@ -400,6 +407,21 @@ The program can also specify a TCP connection. See `make-comint'."
|
||||
:version "20.8"
|
||||
:group 'SQL)
|
||||
|
||||
;; Customization for Linter
|
||||
|
||||
(defcustom sql-linter-program "inl"
|
||||
"*Command to start inl by RELEX.
|
||||
|
||||
Starts `sql-interactive-mode' after doing some setup."
|
||||
:type 'file
|
||||
:group 'SQL)
|
||||
|
||||
(defcustom sql-linter-options nil
|
||||
"*List of additional options for `sql-linter-program'."
|
||||
:type '(repeat string)
|
||||
:version "21.3"
|
||||
:group 'SQL)
|
||||
|
||||
|
||||
|
||||
;;; Variables which do not need customization
|
||||
@ -441,7 +463,7 @@ Used by `sql-rename-buffer'.")
|
||||
|
||||
;; Keymap for sql-interactive-mode.
|
||||
|
||||
(defvar sql-interactive-mode-map
|
||||
(defvar sql-interactive-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(if (functionp 'set-keymap-parent)
|
||||
(set-keymap-parent map comint-mode-map); Emacs
|
||||
@ -491,7 +513,9 @@ Based on `comint-mode-map'.")
|
||||
("Highlighting"
|
||||
["ANSI SQL keywords" sql-highlight-ansi-keywords t]
|
||||
["Oracle keywords" sql-highlight-oracle-keywords t]
|
||||
["Postgres keywords" sql-highlight-postgres-keywords t])))
|
||||
["Postgres keywords" sql-highlight-postgres-keywords t]
|
||||
["Linter keywords" sql-highlight-linter-keywords t]
|
||||
)))
|
||||
|
||||
;; easy menu for sql-interactive-mode.
|
||||
|
||||
@ -713,6 +737,100 @@ you define your own sql-mode-postgres-font-lock-keywords.")
|
||||
(cons postgres-types 'font-lock-type-face))))))
|
||||
|
||||
|
||||
(defvar sql-mode-linter-font-lock-keywords nil
|
||||
"Linter SQL keywords used by font-lock.
|
||||
|
||||
This variable is used by `sql-mode' and `sql-interactive-mode'. The
|
||||
regular expressions are created during compilation by calling the
|
||||
function `regexp-opt'.")
|
||||
|
||||
(if sql-mode-linter-font-lock-keywords
|
||||
()
|
||||
(let ((linter-keywords (eval-when-compile
|
||||
(concat "\\b"
|
||||
(regexp-opt '(
|
||||
"autocommit" "autoinc" "autorowid" "cancel" "cascade" "channel"
|
||||
"committed" "count" "countblob" "cross" "current" "data" "database"
|
||||
"datafile" "datafiles" "datesplit" "dba" "dbname" "default" "deferred"
|
||||
"denied" "description" "device" "difference" "directory" "error"
|
||||
"escape" "euc" "exclusive" "external" "extfile" "false" "file"
|
||||
"filename" "filesize" "filetime" "filter" "findblob" "first" "foreign"
|
||||
"full" "fuzzy" "global" "granted" "ignore" "immediate" "increment"
|
||||
"indexes" "indexfile" "indexfiles" "indextime" "initial" "integrity"
|
||||
"internal" "key" "last_autoinc" "last_rowid" "limit" "linter"
|
||||
"linter_file_device" "linter_file_size" "linter_name_length" "ln"
|
||||
"local" "login" "maxisn" "maxrow" "maxrowid" "maxvalue" "message"
|
||||
"minvalue" "module" "names" "national" "natural" "new" "new_table"
|
||||
"no" "node" "noneuc" "nulliferror" "numbers" "off" "old" "old_table"
|
||||
"only" "operation" "optimistic" "option" "page" "partially" "password"
|
||||
"phrase" "plan" "precision" "primary" "priority" "privileges"
|
||||
"proc_info_size" "proc_par_name_len" "protocol" "quant" "range" "raw"
|
||||
"read" "record" "records" "references" "remote" "rename" "replication"
|
||||
"restart" "rewrite" "root" "row" "rule" "savepoint" "security"
|
||||
"sensitive" "sequence" "serializable" "server" "since" "size" "some"
|
||||
"startup" "statement" "station" "success" "sys_guid" "tables" "test"
|
||||
"timeout" "trace" "transaction" "translation" "trigger"
|
||||
"trigger_info_size" "true" "trunc" "uncommitted" "unicode" "unknown"
|
||||
"unlimited" "unlisted" "user" "utf8" "value" "varying" "volumes"
|
||||
"wait" "windows_code" "workspace" "write" "xml"
|
||||
) t) "\\b")))
|
||||
(linter-reserved-words (eval-when-compile
|
||||
(concat "\\b"
|
||||
(regexp-opt '(
|
||||
"access" "action" "add" "address" "after" "all" "alter" "always" "and"
|
||||
"any" "append" "as" "asc" "ascic" "async" "at_begin" "at_end" "audit"
|
||||
"aud_obj_name_len" "backup" "base" "before" "between" "blobfile"
|
||||
"blobfiles" "blobpct" "brief" "browse" "by" "case" "cast" "check"
|
||||
"clear" "close" "column" "comment" "commit" "connect" "contains"
|
||||
"correct" "create" "delete" "desc" "disable" "disconnect" "distinct"
|
||||
"drop" "each" "ef" "else" "enable" "end" "event" "except" "exclude"
|
||||
"execute" "exists" "extract" "fetch" "finish" "for" "from" "get"
|
||||
"grant" "group" "having" "identified" "in" "index" "inner" "insert"
|
||||
"instead" "intersect" "into" "is" "isolation" "join" "left" "level"
|
||||
"like" "lock" "mode" "modify" "not" "nowait" "null" "of" "on" "open"
|
||||
"or" "order" "outer" "owner" "press" "prior" "procedure" "public"
|
||||
"purge" "rebuild" "resource" "restrict" "revoke" "right" "role"
|
||||
"rollback" "rownum" "select" "session" "set" "share" "shutdown"
|
||||
"start" "stop" "sync" "synchronize" "synonym" "sysdate" "table" "then"
|
||||
"to" "union" "unique" "unlock" "until" "update" "using" "values"
|
||||
"view" "when" "where" "with" "without"
|
||||
) t) "\\b")))
|
||||
(linter-types (eval-when-compile
|
||||
(concat "\\b"
|
||||
(regexp-opt '(
|
||||
"bigint" "bitmap" "blob" "boolean" "char" "character" "date"
|
||||
"datetime" "dec" "decimal" "double" "float" "int" "integer" "nchar"
|
||||
"number" "numeric" "real" "smallint" "varbyte" "varchar" "byte"
|
||||
"cursor" "long"
|
||||
) t) "\\b")))
|
||||
(linter-builtin-functions (eval-when-compile
|
||||
(concat "\\b"
|
||||
(regexp-opt '(
|
||||
"abs" "acos" "asin" "atan" "atan2" "avg" "ceil" "cos" "cosh" "divtime"
|
||||
"exp" "floor" "getbits" "getblob" "getbyte" "getlong" "getraw"
|
||||
"getstr" "gettext" "getword" "hextoraw" "lenblob" "length" "log"
|
||||
"lower" "lpad" "ltrim" "max" "min" "mod" "monthname" "nvl"
|
||||
"octet_length" "power" "rand" "rawtohex" "repeat_string"
|
||||
"right_substr" "round" "rpad" "rtrim" "sign" "sin" "sinh" "soundex"
|
||||
"sqrt" "sum" "tan" "tanh" "timeint_to_days" "to_char" "to_date"
|
||||
"to_gmtime" "to_localtime" "to_number" "trim" "upper" "decode"
|
||||
"substr" "substring" "chr" "dayname" "days" "greatest" "hex" "initcap"
|
||||
"instr" "least" "multime" "replace" "width"
|
||||
) t) "\\b"))))
|
||||
(setq sql-mode-linter-font-lock-keywords
|
||||
(append sql-mode-ansi-font-lock-keywords
|
||||
(list (cons linter-keywords 'font-lock-function-name-face)
|
||||
(cons linter-reserved-words 'font-lock-keyword-face)
|
||||
;; XEmacs doesn't have font-lock-builtin-face
|
||||
(if (string-match "XEmacs\\|Lucid" emacs-version)
|
||||
(cons linter-builtin-functions 'font-lock-preprocessor-face)
|
||||
;; GNU Emacs 19 doesn't have it either
|
||||
(if (string-match "GNU Emacs 19" emacs-version)
|
||||
(cons linter-builtin-functions 'font-lock-function-name-face)
|
||||
;; Emacs
|
||||
(cons linter-builtin-functions 'font-lock-builtin-face)))
|
||||
(cons linter-types 'font-lock-type-face))))))
|
||||
|
||||
(defvar sql-mode-font-lock-keywords sql-mode-ansi-font-lock-keywords
|
||||
"SQL keywords used by font-lock.
|
||||
|
||||
@ -738,6 +856,13 @@ Basically, this just sets `font-lock-keywords' appropriately."
|
||||
(setq font-lock-keywords sql-mode-postgres-font-lock-keywords)
|
||||
(font-lock-fontify-buffer))
|
||||
|
||||
(defun sql-highlight-linter-keywords ()
|
||||
"Highlight LINTER keywords.
|
||||
Basically, this just sets `font-lock-keywords' appropriately."
|
||||
(interactive)
|
||||
(setq font-lock-keywords sql-mode-linter-font-lock-keywords)
|
||||
(font-lock-fontify-buffer))
|
||||
|
||||
(defun sql-highlight-ansi-keywords ()
|
||||
"Highlight ANSI SQL keywords.
|
||||
Basically, this just sets `font-lock-keywords' appropriately."
|
||||
@ -783,7 +908,7 @@ the regular expression `comint-prompt-regexp', a buffer local variable."
|
||||
(defun sql-accumulate-and-indent ()
|
||||
"Continue SQL statement on the next line."
|
||||
(interactive)
|
||||
(if (fboundp 'comint-accumulate)
|
||||
(if (fboundp 'comint-accumulate)
|
||||
(comint-accumulate)
|
||||
(newline))
|
||||
(indent-according-to-mode))
|
||||
@ -809,6 +934,7 @@ Other non-free SQL implementations are also supported:
|
||||
Ingres: \\[sql-ingres]
|
||||
Microsoft: \\[sql-ms]
|
||||
Interbase: \\[sql-interbase]
|
||||
Linter: \\[sql-linter]
|
||||
|
||||
But we urge you to choose a free implementation instead of these.
|
||||
|
||||
@ -896,7 +1022,7 @@ be in `sql-interactive-mode' and have a process."
|
||||
found)))))
|
||||
|
||||
(defun sql-set-sqli-buffer-generally ()
|
||||
"Set SQLi buffer for all SQL buffers that have none.
|
||||
"Set SQLi buffer for all SQL buffers that have none.
|
||||
This function checks all SQL buffers for their SQLi buffer. If their
|
||||
SQLi buffer is nonexistent or has no process, it is set to the current
|
||||
default SQLi buffer. The current default SQLi buffer is determined
|
||||
@ -1022,7 +1148,7 @@ Inserts SELECT or commas if appropriate."
|
||||
Placeholders are words starting with and ampersand like &this.
|
||||
This function is used for `comint-input-sender' if using `sql-oracle' on NT."
|
||||
(while (string-match "&\\(\\sw+\\)" string)
|
||||
(setq string (replace-match
|
||||
(setq string (replace-match
|
||||
(read-from-minibuffer
|
||||
(format "Enter value for %s: " (match-string 1 string))
|
||||
nil nil nil sql-placeholder-history)
|
||||
@ -1348,7 +1474,7 @@ The default comes from `process-coding-system-alist' and
|
||||
(setq parameter (nconc (list parameter) sql-oracle-options))
|
||||
(setq parameter sql-oracle-options))
|
||||
(if parameter
|
||||
(set-buffer (apply 'make-comint "SQL" sql-oracle-program nil
|
||||
(set-buffer (apply 'make-comint "SQL" sql-oracle-program nil
|
||||
parameter))
|
||||
(set-buffer (make-comint "SQL" sql-oracle-program nil))))
|
||||
(setq sql-prompt-regexp "^SQL> ")
|
||||
@ -1612,7 +1738,8 @@ If buffer exists and a process is running, just switch to buffer
|
||||
|
||||
Interpreter used comes from variable `sql-ms-program'. Login uses the
|
||||
variables `sql-user', `sql-password', `sql-database', and `sql-server'
|
||||
as defaults, if set.
|
||||
as defaults, if set. Additional command line parameters can be stored
|
||||
in the list `sql-ms-options'.
|
||||
|
||||
The buffer is put in sql-interactive-mode, giving commands for sending
|
||||
input. See `sql-interactive-mode'.
|
||||
@ -1632,7 +1759,7 @@ The default comes from `process-coding-system-alist' and
|
||||
(message "Login...")
|
||||
;; Put all parameters to the program (if defined) in a list and call
|
||||
;; make-comint.
|
||||
(let ((params '("-w 300")))
|
||||
(let ((params sql-ms-options))
|
||||
(if (not (string= "" sql-server))
|
||||
(setq params (append (list "-S" sql-server) params)))
|
||||
(if (not (string= "" sql-database))
|
||||
@ -1809,6 +1936,62 @@ The default comes from `process-coding-system-alist' and
|
||||
(message "Login...done")
|
||||
(pop-to-buffer sql-buffer)))
|
||||
|
||||
;;;###autoload
|
||||
(defun sql-linter ()
|
||||
"Run inl by RELEX as an inferior process.
|
||||
|
||||
If buffer `*SQL*' exists but no process is running, make a new process.
|
||||
If buffer exists and a process is running, just switch to buffer
|
||||
`*SQL*'.
|
||||
|
||||
Interpreter used comes from variable `sql-linter-program' - usually `inl'.
|
||||
Login uses the variables `sql-user', `sql-password', `sql-database' and
|
||||
`sql-server' as defaults, if set. Additional command line parameters
|
||||
can be stored in the list `sql-linter-options'. Run inl -h to get help on
|
||||
parameters.
|
||||
|
||||
`sql-database' is used to set the LINTER_MBX environment variable for
|
||||
local connections, `sql-server' refers to the server name from the
|
||||
`nodetab' file for the network connection (dbc_tcp or friends must run
|
||||
for this to work). If `sql-password' is an empty string, inl will use
|
||||
an empty password.
|
||||
|
||||
The buffer is put in sql-interactive-mode, giving commands for sending
|
||||
input. See `sql-interactive-mode'.
|
||||
|
||||
To use LINTER font locking by default, put this line into your .emacs :
|
||||
(setq sql-mode-font-lock-keywords sql-mode-linter-font-lock-keywords)
|
||||
|
||||
\(Type \\[describe-mode] in the SQL buffer for a list of commands.)"
|
||||
(interactive)
|
||||
(if (comint-check-proc "*SQL*")
|
||||
(pop-to-buffer "*SQL*")
|
||||
(sql-get-login 'user 'password 'database 'server)
|
||||
(message "Login...")
|
||||
;; Put all parameters to the program (if defined) in a list and call
|
||||
;; make-comint.
|
||||
(let ((params sql-linter-options) (login nil) (old-mbx (getenv "LINTER_MBX")))
|
||||
(if (not (string= "" sql-user))
|
||||
(setq login (concat sql-user "/" sql-password)))
|
||||
(setq params (append (list "-u" login) params))
|
||||
(if (not (string= "" sql-server))
|
||||
(setq params (append (list "-n" sql-server) params)))
|
||||
(if (string= "" sql-database)
|
||||
(setenv "LINTER_MBX" nil)
|
||||
(setenv "LINTER_MBX" sql-database))
|
||||
(set-buffer (apply 'make-comint "SQL" sql-linter-program nil
|
||||
params))
|
||||
(setenv "LINTER_MBX" old-mbx)
|
||||
)
|
||||
(setq sql-prompt-regexp "^SQL>")
|
||||
(setq sql-prompt-length 4)
|
||||
(setq sql-buffer (current-buffer))
|
||||
(sql-interactive-mode)
|
||||
(message "Login...done")
|
||||
(pop-to-buffer sql-buffer)))
|
||||
|
||||
|
||||
|
||||
(provide 'sql)
|
||||
|
||||
;;; sql.el ends here
|
||||
|
Loading…
Reference in New Issue
Block a user