diff options
author | Vincent Ambo <mail@tazj.in> | 2020-06-16T00·06+0100 |
---|---|---|
committer | Vincent Ambo <mail@tazj.in> | 2020-06-16T00·06+0100 |
commit | 4fe4e3d9a297ff9c8aa77e1a196a96b65ecd99ae (patch) | |
tree | 54455b0cd36e58fd745ce0b6d38101b7a902ce4b /users/glittershark/emacs.d/sql-strings.el | |
parent | 2edb963b97867b27f68efac8d05bf966077b0b01 (diff) | |
parent | 69ee53bffaf145eb86dd39a6cdc0ae4d9d3de45c (diff) |
Add 'users/glittershark/emacs.d/' from commit '69ee53bffaf145eb86dd39a6cdc0ae4d9d3de45c' r/979
git-subtree-dir: users/glittershark/emacs.d git-subtree-mainline: 2edb963b97867b27f68efac8d05bf966077b0b01 git-subtree-split: 69ee53bffaf145eb86dd39a6cdc0ae4d9d3de45c
Diffstat (limited to 'users/glittershark/emacs.d/sql-strings.el')
-rw-r--r-- | users/glittershark/emacs.d/sql-strings.el | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/users/glittershark/emacs.d/sql-strings.el b/users/glittershark/emacs.d/sql-strings.el new file mode 100644 index 000000000000..37e22af421c6 --- /dev/null +++ b/users/glittershark/emacs.d/sql-strings.el @@ -0,0 +1,75 @@ +;;; ~/.doom.d/sql-strings.el -*- lexical-binding: t; -*- + +;;; https://www.emacswiki.org/emacs/StringAtPoint +(defun ourcomments-string-or-comment-bounds-1 (what) + (save-restriction + (widen) + (let* ((here (point)) + ;; Fix-me: when on end-point, how to handle that and which should be last hit point? + (state (parse-partial-sexp (point-min) (1+ here))) + (type (if (nth 3 state) + 'string + (if (nth 4 state) + 'comment))) + (start (when type (nth 8 state))) + end) + (unless start + (setq state (parse-partial-sexp (point-min) here)) + (setq type (if (nth 3 state) + 'string + (if (nth 4 state) + 'comment))) + (setq start (when type (nth 8 state)))) + (unless (or (not what) + (eq what type)) + (setq start nil)) + (if (not start) + (progn + (goto-char here) + nil) + (setq state (parse-partial-sexp (1+ start) (point-max) + nil nil state 'syntax-table)) + (setq end (point)) + (goto-char here) + (cons start end))))) + +(defun ourcomments-bounds-of-string-at-point () + "Return bounds of string at point if any." + (ourcomments-string-or-comment-bounds-1 'string)) + +(put 'string 'bounds-of-thing-at-point 'ourcomments-bounds-of-string-at-point) + +(defun -sanitize-sql-string (str) + (->> str + (downcase) + (s-trim) + (replace-regexp-in-string + (rx (or (and string-start (or "\"\"\"" + "\"")) + (and (or "\"\"\"" + "\"") + string-end))) + "") + (s-trim))) + +(defun sql-string-p (str) + "Returns 't if STR looks like a string literal for a SQL statement" + (setq str (-sanitize-sql-string str)) + (or (s-starts-with? "select" str))) + +;;; tests + +(require 'ert) + +(ert-deftest sanitize-sql-string-test () + (should (string-equal "select * from foo;" + (-sanitize-sql-string + "\"\"\"SELECT * FROM foo;\n\n\"\"\"")))) + +(ert-deftest test-sql-string-p () + (dolist (str '("SELECT * FROM foo;" + "select * from foo;")) + (should (sql-string-p str))) + + (dolist (str '("not a QUERY")) + (should-not (sql-string-p str)))) |