Công cụ định dạng Makefile bằng Python gây tranh cãi về việc hợp nhất .PHONY và lựa chọn ngôn ngữ

Nhóm Cộng đồng BigGo
Công cụ định dạng Makefile bằng Python gây tranh cãi về việc hợp nhất .PHONY và lựa chọn ngôn ngữ

Một công cụ mới dựa trên Python có tên mblike đã xuất hiện để giải quyết thách thức lâu dài trong việc định dạng Makefile một cách nhất quán. Công cụ này hứa hẹn sẽ tự động định dạng Makefile theo các thực hành tốt nhất của cộng đồng, nhưng việc phát hành đã châm ngòi cho những cuộc thảo luận sôi nổi về cả phương pháp kỹ thuật lẫn lựa chọn triển khai.

Tùy chọn cài đặt:

  • PyPI: pip install mblike
  • Tiện ích mở rộng VSCode: Tìm kiếm " Makefile Formatter " trong phần Extensions
  • Từ mã nguồn: Clone từ GitHub và chạy make install

Tranh cãi về việc khai báo .PHONY

Cuộc tranh luận gay gắt nhất xoay quanh cách tiếp cận của mblike trong việc hợp nhất các khai báo .PHONY. Công cụ này nhóm nhiều target .PHONY thành các khai báo đơn lẻ, nhưng nhiều developer phản đối mạnh mẽ thực hành này. Những người chỉ trích cho rằng các khai báo .PHONY nên được giữ gần với các target tương ứng để có khả năng đọc và bảo trì tốt hơn. Sự bất đồng cơ bản này làm nổi bật một sự phân chia triết lý sâu sắc hơn trong cộng đồng Makefile về các nguyên tắc tổ chức code.

Tranh cãi này vượt xa những sở thích định dạng đơn thuần. Một số developer xem việc hợp nhất như một tính năng phản tác dụng đi ngược lại các quy ước Makefile đã được thiết lập. Tuy nhiên, công cụ này có cung cấp các tùy chọn cấu hình để vô hiệu hóa hành vi này, cho phép người dùng duy trì phong cách ưa thích trong khi vẫn hưởng lợi từ các tính năng định dạng khác.

Các Tùy Chọn Cấu Hình:

{
  use_tabs: true,
  tab_width: 1,
  space_around_assignment: true,
  space_around_colon: true,
  insert_missing_phony: true,
  remove_trailing_whitespace: true,
  group_phony_declarations: false  // Có thể vô hiệu hóa việc hợp nhất
}

Việc triển khai bằng Python nhận phản ứng trái chiều

Lựa chọn triển khai mblike bằng Python đã tạo ra cuộc thảo luận đáng kể về việc phân phối công cụ và hiệu suất. Trong khi Python cung cấp khả năng xử lý chuỗi xuất sắc và một cộng đồng developer lớn, những người chỉ trích chỉ ra sự phức tạp trong cài đặt và các vấn đề quản lý dependency. Công cụ này yêu cầu cài đặt pip, điều này tự động loại trừ nhiều người dùng tiềm năng không có sẵn các công cụ quản lý package Python.

Những lo ngại về hiệu suất cũng xuất hiện trong cuộc thảo luận cộng đồng, với một số developer lưu ý rằng các công cụ dựa trên Python như yamllint có thể thêm độ trễ đáng chú ý vào quy trình phát triển. Điều này trở nên đặc biệt có vấn đề đối với quy trình format-on-save nơi mà từng mili giây đều quan trọng. Bất chấp những hạn chế này, những người ủng hộ cho rằng tính phổ biến của Python và sự dễ dàng trong phát triển vượt trội hơn những nhược điểm đối với hầu hết các trường hợp sử dụng.

Make như Task Runner châm ngòi thảo luận rộng hơn

Việc phát hành công cụ này cũng đã làm bùng lên lại các cuộc tranh luận về vai trò của Make trong phát triển hiện đại. Trong khi Make ban đầu được thiết kế để quản lý dependency file dựa trên ngày sửa đổi, nhiều developer hiện sử dụng nó như một task runner đa năng. Sự tiến hóa này đã tạo ra căng thẳng giữa những người thuần túy thích Make cho mục đích dự định và những người thực dụng đánh giá cao tính phổ biến và đơn giản của nó.

Make có trong POSIX, vì vậy nó thường có sẵn. Cùng lý do mà mọi người viết shell scripts.

Cuộc thảo luận tiết lộ rằng nhiều developer đánh giá cao tính khả dụng phổ quát của Make hơn các task runner chuyên biệt hơn, ngay cả khi thừa nhận những hạn chế của nó đối với các quy trình phức tạp.

Các Quy Tắc Định Dạng Chính:

  • Thụt lề: Bắt buộc sử dụng 1 tab thay vì dấu cách
  • Toán tử gán: Chuẩn hóa khoảng cách xung quanh =, :=, ::=
  • Dấu hai chấm đích: Quản lý khoảng cách xung quanh dấu hai chấm phụ thuộc
  • Khoảng trắng cuối dòng: Loại bỏ các dấu cách cuối dòng không cần thiết
  • Khai báo .PHONY: Nhóm và hợp nhất các khai báo (có thể cấu hình)

Tính năng phát hiện thông minh cho thấy tiềm năng

Bất chấp những tranh cãi, khả năng phát hiện .PHONY thông minh của mblike đã thu hút sự quan tâm. Công cụ này sử dụng phân tích động để xác định các phony target bị thiếu bằng cách kiểm tra các lệnh recipe thay vì dựa vào quy ước đặt tên. Cách tiếp cận này có thể tự động phát hiện các target thực hiện các hành động như chạy lệnh Docker hoặc thực thi script dọn dẹp, có khả năng tiết kiệm thời gian cho developer và giảm lỗi.

Công cụ này cũng cung cấp các quy tắc định dạng toàn diện cho indentation, spacing và xử lý line continuation. Những tính năng này giải quyết các điểm đau thường gặp trong việc bảo trì Makefile, ngay cả khi việc hợp nhất .PHONY vẫn còn gây tranh cãi.

Phản ứng của cộng đồng đối với mblike phản ánh những căng thẳng rộng hơn trong phát triển phần mềm giữa tự động hóa và kiểm soát thủ công, giữa tiện lợi và hiệu suất, và giữa các thực hành đã được thiết lập và các cách tiếp cận mới. Trong khi công cụ này có thể không thỏa mãn sở thích của mọi người, nó đại diện cho một bước tiến khác trong sự tiến hóa liên tục của công cụ phát triển cho một trong những hệ thống build lâu đời nhất của máy tính.

Tham khảo: mblike