mirror of
https://github.com/python/cpython.git
synced 2025-12-15 21:44:50 +00:00
(py-goto-beginning-of-tqs): Finds the beginning of the triple quoted
string we find ourselves in, based on the passed in delimiter.
(py-compute-indentation): Fixes for indentation errors when we land
inside a triple quoted string. For example:
def foo():
if os.path.isfile(o_pri_mbox_file) and os.path.isfile(o_pub_mbox_file):
print """\
I found both a private and a public mbox archive file
private: %s
public : %s
I won't move either file, but you should choose one and move it to
%s
You may want to merge them manually, but be careful about exposing private
correspondences to the public.""" % (
o_pri_mbox_file, o_pub_mbox_file, mbox_file)
*----indentation would be wrong on this line.
This commit is contained in:
parent
ef30092207
commit
9c1696cff5
1 changed files with 28 additions and 11 deletions
|
|
@ -1577,7 +1577,8 @@ dedenting."
|
|||
(beginning-of-line)
|
||||
(let* ((bod (py-point 'bod))
|
||||
(pps (parse-partial-sexp bod (point)))
|
||||
(boipps (parse-partial-sexp bod (py-point 'boi))))
|
||||
(boipps (parse-partial-sexp bod (py-point 'boi)))
|
||||
placeholder)
|
||||
(cond
|
||||
;; are we inside a multi-line string or comment?
|
||||
((or (and (nth 3 pps) (nth 3 boipps))
|
||||
|
|
@ -1620,6 +1621,11 @@ dedenting."
|
|||
(current-indentation)
|
||||
;; else they're about to enter the first item
|
||||
(goto-char open-bracket-pos)
|
||||
(setq placeholder (point))
|
||||
(py-goto-initial-line)
|
||||
(py-goto-beginning-of-tqs
|
||||
(save-excursion (nth 3 (parse-partial-sexp
|
||||
placeholder (point)))))
|
||||
(+ (current-indentation) py-indent-offset))))
|
||||
|
||||
;; else on backslash continuation line
|
||||
|
|
@ -1726,18 +1732,15 @@ dedenting."
|
|||
;; if we landed inside a string, go to the beginning of that
|
||||
;; string. this handles triple quoted, multi-line spanning
|
||||
;; strings.
|
||||
(let* ((delim (nth 3 (parse-partial-sexp bod (point))))
|
||||
(skip (and delim (make-string 1 delim))))
|
||||
(when skip
|
||||
(save-excursion
|
||||
(py-safe (search-backward skip))
|
||||
(if (and (eq (char-before) delim)
|
||||
(eq (char-before (1- (point))) delim))
|
||||
(setq skip (make-string 3 delim))))
|
||||
;; we're looking at a triple-quoted string
|
||||
(py-safe (search-backward skip))))
|
||||
(py-goto-beginning-of-tqs (nth 3 (parse-partial-sexp bod (point))))
|
||||
;; now skip backward over continued lines
|
||||
(setq placeholder (point))
|
||||
(py-goto-initial-line)
|
||||
;; we may *now* have landed in a TQS, so find the beginning of
|
||||
;; this string.
|
||||
(py-goto-beginning-of-tqs
|
||||
(save-excursion (nth 3 (parse-partial-sexp
|
||||
placeholder (point)))))
|
||||
(+ (current-indentation)
|
||||
(if (py-statement-opens-block-p)
|
||||
py-indent-offset
|
||||
|
|
@ -2747,6 +2750,20 @@ If nesting level is zero, return nil."
|
|||
(or (py-backslash-continuation-line-p)
|
||||
(py-nesting-level))))
|
||||
|
||||
(defun py-goto-beginning-of-tqs (delim)
|
||||
"Go to the beginning of the triple quoted string we find ourselves in.
|
||||
DELIM is the TQS string delimiter character we're searching backwards
|
||||
for."
|
||||
(let ((skip (and delim (make-string 1 delim))))
|
||||
(when skip
|
||||
(save-excursion
|
||||
(py-safe (search-backward skip))
|
||||
(if (and (eq (char-before) delim)
|
||||
(eq (char-before (1- (point))) delim))
|
||||
(setq skip (make-string 3 delim))))
|
||||
;; we're looking at a triple-quoted string
|
||||
(py-safe (search-backward skip)))))
|
||||
|
||||
(defun py-goto-initial-line ()
|
||||
"Go to the initial line of the current statement.
|
||||
Usually this is the line we're on, but if we're on the 2nd or
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue