]> code.delx.au - gnu-emacs-elpa/commitdiff
Added faster and more convenient grab functions.
authorNikolaj Schumacher <git@nschum.de>
Tue, 14 Apr 2009 08:14:48 +0000 (10:14 +0200)
committerNikolaj Schumacher <git@nschum.de>
Wed, 15 Apr 2009 07:45:27 +0000 (09:45 +0200)
company-abbrev.el
company-css.el
company-elisp.el
company-etags.el
company-files.el
company-gtags.el
company-ispell.el
company-semantic.el
company-xcode.el
company.el

index 59259772f28582b619e4ae059a2c405333f91a69..ab017aaaf76500039f26b5d8dd336a17a06c5bc7 100644 (file)
@@ -32,7 +32,7 @@
   (case command
         ('interactive (company-begin-backend 'company-abbrev
                                              'company-abbrev-insert))
-        ('prefix (or (company-grab "\\_<\\(\\sw\\|\\s_\\)+\\_>") ""))
+        ('prefix (company-grab-symbol))
         ('candidates (nconc
                       (delete "" (all-completions arg global-abbrev-table))
                       (delete "" (all-completions arg local-abbrev-table))))
index dcb58a1224fc4d7098eca7c89319597374d345b5..af6608c428d356eb47bacca6641aa5a8a6da6552 100644 (file)
   "Return the CSS property before point, if any.
 Returns \"\" if no property found, but feasible at this position."
   (when (company-css-inside-braces-p)
-    (or (company-grab "\\_<[[:alpha:]-]+\\_>\\=")
-        (company-grab "{\\|[[:space:]]" 1))))
+    (company-grab-symbol)))
 
 ;;; values
 (defconst company-css-property-value-regexp
index d902c4d8245167d6fbee196dc471943b45e9b123..74f88972c9d29f2118faf50e23c427b80395f552 100644 (file)
@@ -28,11 +28,8 @@ Functions are offered for completion only after ' and \(."
   :type '(choice (const :tag "Off" nil)
                  (const :tag "On" t)))
 
-(defvar company-lisp-symbol-regexp
-  "\\_<\\(\\sw\\|\\s_\\)+\\_>\\=")
-
 (defun company-grab-lisp-symbol ()
-  (let ((prefix (or (company-grab company-lisp-symbol-regexp) "")))
+  (let ((prefix (company-grab-symbol)))
     (unless (and (company-in-string-or-comment (- (point) (length prefix)))
                  (/= (char-before (- (point) (length prefix))) ?`))
       prefix)))
index 820ffeee120ac01b58a713345ecf33d02af8f48e..a2fa1310b1bea76de86d9e8ccae30c58fab397e6 100644 (file)
@@ -29,9 +29,6 @@ buffer automatically."
   :type '(choice (const :tag "off" nil)
                  (const :tag "on" t)))
 
-(defvar company-etags-symbol-regexp
-  "\\_<[A-Za-z_][A-Za-z_0-9]*\\_>")
-
 (defvar company-etags-modes '(c-mode objc-mode c++-mode java-mode jde-mode
                               pascal-mode perl-mode python-mode))
 
@@ -66,7 +63,7 @@ buffer automatically."
                   (not (company-in-string-or-comment))
                   (require 'etags nil t)
                   (company-etags-buffer-table)
-                  (or (company-grab company-etags-symbol-regexp) "")))
+                  (company-grab-symbol)))
     ('candidates (let ((tags-table-list (company-etags-buffer-table))
                        (completion-ignore-case nil))
                    (and (fboundp 'tags-completion-table)
index cdb8bf1624d39beef54ed93c5ae7c6bbfe9682a5..c081558dd94435759d4102f2ec1b1980fee4fe09 100644 (file)
@@ -28,9 +28,9 @@
 
 (defun company-files-grab-existing-name ()
   ;; Grab file names with spaces, only when they include quotes.
-  (let ((file (or (company-grab "\"\\(~?/[^\"\n]*\\)" 1)
-                  (company-grab "\'\\(~?/[^\'\n]*\\)" 1)
-                  (company-grab "[ \t\n]\\(~?/[^ \t\n]*\\)" 1)))
+  (let ((file (or (company-grab-line "\"\\(~?/[^\"\n]*\\)" 1)
+                  (company-grab-line "\'\\(~?/[^\'\n]*\\)" 1)
+                  (company-grab-line "[ \t\n]\\(~?/[^ \t\n]*\\)" 1)))
         dir)
     (and file
          (setq dir (file-name-directory file))
index e9aca67b68bc00af13775efca25f1e50cfb79b28..c8b32b1264edc3023899670c881edcf094a99be3 100644 (file)
@@ -27,9 +27,6 @@
   :type 'string
   :group 'company)
 
-(defvar company-gtags-symbol-regexp
-  "\\_<[A-Za-z_][A-Za-z_0-9]*\\_>")
-
 (defvar company-gtags-modes '(c-mode c++-mode jde-mode java-mode php-mode))
 
 (defvar company-gtags-available 'unknown)
       (when (= 0 (call-process "global" nil (list (current-buffer) nil)
                                nil "-c" prefix))
         (goto-char (point-min))
-        (while (looking-at company-gtags-symbol-regexp)
-          (push (match-string-no-properties 0) tags)
-          (forward-line)))
-      (nreverse tags))))
+        (split-string (buffer-string) "\n" t)))))
 
 (defun company-gtags-location (tag)
   (with-temp-buffer
@@ -77,7 +71,7 @@
     ('prefix (and (memq major-mode company-gtags-modes)
                   (not (company-in-string-or-comment))
                   (company-gtags-available)
-               (or (company-grab company-gtags-symbol-regexp) "")))
+               (company-grab-symbol)))
     ('candidates (company-gtags-fetch-tags arg))
     ('sorted t)
     ('location (company-gtags-location arg))))
index fbbeda32d7d296238c05af30eb6cc5f368522d49..b32a33293d0aa6f1ecc97ab1c7b6f4cee25a993d 100644 (file)
@@ -48,7 +48,7 @@ If nil, use `ispell-complete-word-dict'."
   (case command
     ('interactive (company-begin-backend 'company-ispell))
     ('prefix (when (company-ispell-available)
-               (company-grab "\\<\\w+\\>")))
+               (company-grab-word)))
     ('candidates (lookup-words arg (or company-ispell-dictionary
                                        ispell-complete-word-dict)))
     ('sorted t)
index e1cfbda415d7fef3795199b6e6e71e18a559f6df..6f10af8a5c33633a941b24d684b85b6b6124dc01 100644 (file)
@@ -26,9 +26,6 @@
   :group 'company
   :type 'function)
 
-(defvar company-semantic-context-regexp
-  "\\(->\\|\\.\\|\\_<\\)\\(\\(\\s_\\|\\sw\\)+\\_>\\=\\)")
-
 (defun company-semantic-doc-or-summary (tag)
   (or (semantic-documentation-for-tag tag)
       (funcall semantic-idle-summary-function tag nil t)))
@@ -70,7 +67,7 @@
     ('prefix (and (memq major-mode '(c-mode c++-mode jde-mode java-mode))
                   (semantic-active-p)
                   (not (company-in-string-or-comment))
-                  (or (company-grab company-semantic-context-regexp 2) "")))
+                  (company-grab-symbol)))
     ('candidates (or (company-semantic-completions arg)
                      (mapcar 'semantic-tag-name
                              (semantic-analyze-find-tags-by-prefix arg))))
index c4d9ee304fd29f2c0d550b0e38edc32673d93fc5..8e068ade17edc048a54a78cdc78f8ee368d47cdf 100644 (file)
@@ -51,9 +51,6 @@ valid in most contexts."
               (const "Type") (const "Union") (const "Variable")
               (const "Function")))
 
-(defvar company-xcode-symbol-regexp
-  "\\_<[A-Za-z_][A-Za-z_0-9]*\\_>")
-
 (defvar company-xcode-project 'unknown)
 (make-variable-buffer-local 'company-xcode-project)
 
@@ -104,7 +101,7 @@ valid in most contexts."
     ('prefix (and company-xcode-xcodeindex-executable
                   (not (company-in-string-or-comment))
                   (company-xcode-tags)
-                  (or (company-grab company-xcode-symbol-regexp) "")))
+                  (company-grab-symbol)))
     ('candidates (let ((completion-ignore-case nil))
                    (all-completions arg (company-xcode-tags))))))
 
index c064b3d83595d6add60360d624344f4c3a895674..ad860545a4ab37e3c25cecabf58bdaace0a28502 100644 (file)
@@ -69,6 +69,8 @@
 ;;
 ;;; Change Log:
 ;;
+;;    Performance enhancements.
+;;
 ;; 2009-04-12 (0.3)
 ;;    Added `company-begin-commands' option.
 ;;    Added abbrev, tempo and Xcode back-ends.
@@ -512,10 +514,25 @@ keymap during active completions (`company-active-map'):
 
 ;;; backends ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(defun company-grab (regexp &optional expression)
-  (when (looking-back regexp)
+(defun company-grab (regexp &optional expression limit)
+  (when (looking-back regexp limit)
     (or (match-string-no-properties (or expression 0)) "")))
 
+(defun company-grab-line (regexp &optional expression)
+  (company-grab regexp expression (point-at-bol)))
+
+(defun company-grab-symbol ()
+  (if (looking-at "\\_>")
+      (buffer-substring (point) (save-excursion (skip-syntax-backward "w_")
+                                                (point)))
+    ""))
+
+(defun company-grab-word ()
+  (if (looking-at "\\>")
+      (buffer-substring (point) (save-excursion (skip-syntax-backward "w")
+                                                (point)))
+    ""))
+
 (defun company-in-string-or-comment (&optional point)
   (let ((pos (syntax-ppss)))
     (or (nth 3 pos) (nth 4 pos) (nth 7 pos))))