Indentation characters of the original code are not preserved

Đã đóng
#379 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
72/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Ít trao đổi
Công nghệ
python
Lĩnh vực
tooling

Hướng nghiên cứu

Bắt đầu với _do_add_formatted_docstring và _do_add_unformatted_docstring, sau đó kiểm tra _do_format_code và việc sử dụng tokenize.untokenize của nó. Chạy reproducer được cung cấp, có thụt lề bằng tab, với docformatter và xác minh rằng các tab bên trong docstring và trên các dòng tiếp tục của mã vẫn là tab, đồng thời việc định dạng vẫn hoạt động.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

fresh

docformatter unnecessarily replaces tab characters with spaces. When a file
uses tabs, running docformatter on it changes indentation characters both
inside docstrings and in code outside the docstring.

Reproducer

def some_function(
	a_parameter
):
	"""Important documentation.

	with an indented item
	"""
	...
$ docformatter file.py
--- before/file.py
+++ after/file.py
@@ -1,8 +1,8 @@
 def some_function(
-	a_parameter
+ a_parameter
 ):
 	"""Important documentation.
 
-	with an indented item
-	"""
+ with an indented item
+ """
 	...

Cause

Two independent code paths substitute spaces for the original indentation
characters:

  1. _do_add_formatted_docstring and _do_add_unformatted_docstring build
    the indent for the docstring's internal lines as " " * token.start[1],
    based on the docstring's opening line. When the opening line is indented with
    a tab, each tab inside the docstring is replaced by a single space.

  2. _do_format_code runs the whole file through tokenize.untokenize,
    which reconstructs inter-token whitespace as " " * col_offset. This means
    that tabs on continuation lines are also replaced by a single space.

Ngôn ngữ chính
Python
Star
599
Fork
98
Merge trung bình
1 ngày 7 giờ
Pull request đã merge (30 ngày)
17

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của PyCQA/docformatter

Tất cả issue của PyCQA/docformatter

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.