(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))))
"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
: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)))
: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))
(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)
(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))
: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
('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))))
(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)
: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)))
('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))))
(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)
('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))))))
;;
;;; Change Log:
;;
+;; Performance enhancements.
+;;
;; 2009-04-12 (0.3)
;; Added `company-begin-commands' option.
;; Added abbrev, tempo and Xcode back-ends.
;;; 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))))