Skip to content

Commit

Permalink
When indenting code, limit how far back we search.
Browse files Browse the repository at this point in the history
Fixes JuliaLang#9254 -- performance is
just too bad on long files otherwise.
  • Loading branch information
Wilfred committed Dec 10, 2014
1 parent ed25518 commit 4e89cde
Showing 1 changed file with 19 additions and 3 deletions.
22 changes: 19 additions & 3 deletions contrib/julia-mode.el
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,8 @@ Do not move back beyond position MIN."
(defun julia-last-open-block (min)
"Move back and return indentation level for last open block.
Do not move back beyond MIN."
;; Ensure MIN is not before the start of the buffer.
(setq min (max min (point-min)))
(let ((pos (julia-last-open-block-pos min)))
(and pos
(progn
Expand All @@ -334,12 +336,26 @@ beginning of the buffer."
(unless (eq (point) (point-min))
(backward-char)))

(defvar julia-max-paren-lookback 400
"When indenting, don't look back more than this
many characters to see if there are unclosed parens.
This variable has a major effect on indent performance if set too
high.")

(defvar julia-max-block-lookback 5000
"When indenting, don't look back more than this
many characters to see if there are unclosed blocks.
This variable has a moderate effect on indent performance if set too
high.")

(defun julia-paren-indent ()
"Return the column position of the innermost containing paren
before point. Returns nil if we're not within nested parens."
(save-excursion
(let ((min-pos (or (julia-last-open-block-pos (point-min))
(point-min)))
(let ((min-pos (max (- (point) julia-max-paren-lookback)
(point-min)))
(open-count 0))
(while (and (> (point) min-pos)
(not (plusp open-count)))
Expand Down Expand Up @@ -383,7 +399,7 @@ before point. Returns nil if we're not within nested parens."
(beginning-of-line)
(forward-to-indentation 0)
(let ((endtok (julia-at-keyword julia-block-end-keywords)))
(ignore-errors (+ (julia-last-open-block (point-min))
(ignore-errors (+ (julia-last-open-block (- (point) julia-max-block-lookback))
(if endtok (- julia-basic-offset) 0)))))
;; Otherwise, use the same indentation as previous line.
(save-excursion (forward-line -1)
Expand Down

0 comments on commit 4e89cde

Please sign in to comment.