Limit token lookback range and start completion from the first non-blank character
ci/woodpecker/push/woodpecker Pipeline was successful Details

When editing files where tokens occur sparingly, like in HTML templates, looking
back for the last token that occured is very expensive and never useful.
WIP-cache
Hugo Thunnissen 10 months ago
parent 281c5e4ae6
commit 1ec0e0cfa2

@ -319,11 +319,18 @@
(and (listp token)
(keywordp (car token))))
(cl-defmethod phpinspect-bmap-last-token-before-point ((bmap phpinspect-bmap) point)
(cl-defmethod phpinspect-bmap-last-token-before-point ((bmap phpinspect-bmap) point &optional limit)
"Search backward in BMAP for last token ending before POINT.
LIMIT is the maximum number of positions to check backward before
giving up. If not provided, this is 10."
(unless limit (setq limit 10))
(let* ((ends (phpinspect-bmap-ends bmap))
(ending))
(ending)
(point-limit (- point limit)))
(unless (hash-table-empty-p ends)
(while (not (or (<= point 0) (setq ending (phpinspect-bmap-tokens-ending-at bmap point))))
(while (not (or (<= point 0) (<= point point-limit)
(setq ending (phpinspect-bmap-tokens-ending-at bmap point))))
(setq point (- point 1)))
(car (last ending)))))

@ -273,6 +273,14 @@ ARG-LIST. ARG-LIST should be a list token as returned by
(phpinspect--make-type :name (car (last arg))))
nil)))))
(defun phpinspect--determine-completion-point ()
"Find first point backwards that could contain any kind of
context for completion."
(save-excursion
(re-search-backward "[^[:blank:]\n]")
(forward-char)
(point)))
(defun phpinspect-eldoc-function ()
"An `eldoc-documentation-function` implementation for PHP files.
@ -284,7 +292,7 @@ TODO:
"
(catch 'phpinspect-parse-interrupted
(let* ((token-map (phpinspect-buffer-parse-map phpinspect-current-buffer))
(resolvecontext (phpinspect-get-resolvecontext token-map (point)))
(resolvecontext (phpinspect-get-resolvecontext token-map (phpinspect--determine-completion-point)))
(parent-token (car (phpinspect--resolvecontext-enclosing-tokens
resolvecontext)))
(enclosing-token (cadr (phpinspect--resolvecontext-enclosing-tokens
@ -1052,7 +1060,7 @@ static variables and static methods."
(defun phpinspect--suggest-at-point ()
(phpinspect--log "Entering suggest at point. Point: %d" (point))
(let* ((bmap (phpinspect-buffer-parse-map phpinspect-current-buffer))
(resolvecontext (phpinspect-get-resolvecontext bmap (point)))
(resolvecontext (phpinspect-get-resolvecontext bmap (phpinspect--determine-completion-point)))
(last-tokens (last (phpinspect--resolvecontext-subject resolvecontext) 2)))
(phpinspect--log "Subject: %s" (phpinspect--resolvecontext-subject
resolvecontext))

Loading…
Cancel
Save