Công cụ tái cấu trúc tự động Rector: Cách mạng hóa nâng cấp PHP

Bạn có đang mất hàng giờ để sửa đổi hàng trăm tệp PHP nhằm tương thích với phiên bản mới? Bạn có gặp khó khăn với sự không nhất quán về phong cách mã trong nhóm của mình không? Rector sẽ biến những điều này thành dĩ vãng. Với một vài cấu hình đơn giản, nó có thể hỗ trợ bạn nâng cấp phiên bản PHP, cải thiện chất lượng mã và thực hiện tái cấu trúc tự động, cho phép các nhà phát triển tập trung vào công việc sáng tạo.

Tại sao chọn Rector?

Rector là một công cụ tái cấu trúc tự động dựa trên Cây cú pháp trừu tượng (AST) cho PHP. Nó có thể hiểu mã của bạn giống như một nhà phát triển có kinh nghiệm và thực hiện các thay đổi theo các quy tắc được xác định trước. So với tái cấu trúc thủ công, Rector mang lại ba lợi thế chính:

  1. Nâng cấp phiên bản liền mạch: Hỗ trợ nâng cấp liền mạch từ PHP 5.3 đến 8.4, tự động xử lý các thay đổi cú pháp như toán tử gộp null, khai báo kiểu thuộc tính, v.v.
  2. Chất lượng mã liên tục: Tích hợp các quy tắc cải thiện chất lượng mã, chẳng hạn như tự động sửa đổi array_push thành $array[].
  3. Tiêu chuẩn hóa hợp tác nhóm: Tích hợp vào quy trình CI để tái cấu trúc tự động, đảm bảo tính nhất quán của phong cách mã.

Bắt đầu với Rector trong 5 phút

1. Cài đặt Rector

Cài đặt Rector trong dự án của bạn bằng Composer (khuyến nghị dưới dạng phụ thuộc phát triển):

composer require rector/rector --dev

2. Tạo tệp cấu hình

Tạo tệp cấu hình rector.php ở thư mục gốc dự án của bạn:

<?php

use Rector\Config\RectorConfig;
use Rector\TypeDeclaration\Rector\Property\TypedPropertyFromStrictConstructorRector;

return RectorConfig::configure()
    // Đăng ký một quy tắc riêng lẻ
    ->withRules([
        TypedPropertyFromStrictConstructorRector::class
    ])
    // Kích hoạt các bộ quy tắc đã chuẩn bị
    ->withPreparedSets(
        deadCode: true,
        codeQuality: true
    );

3. Chạy Rector

Thực hiện chạy thử nghiệm (dry-run) để xem trước các thay đổi tái cấu trúc mà không sửa đổi tệp:

vendor/bin/rector src --dry-run

Sau khi xác nhận rằng kết quả là chính xác, hãy thực hiện tái cấu trúc thực tế:

vendor/bin/rector src

Thực hành các chức năng cốt lõi

Nâng cấp phiên bản: Từ PHP 7.4 lên 8.0

Một trong những khả năng mạnh mẽ nhất của Rector là tự động hóa việc nâng cấp phiên bản PHP. Lấy ví dụ về biểu thức match của PHP 8.0, Rector có thể tự động chuyển đổi các câu lệnh switch thành biểu thức match ngắn gọn hơn:

// Trước khi tái cấu trúc
switch ($status) {
    case 'active':
        $result = 'Enabled';
        break;
    case 'inactive':
        $result = 'Disabled';
        break;
    default:
        $result = 'Unknown';
}

// Sau khi tái cấu trúc
$result = match ($status) {
    'active' => 'Enabled',
    'inactive' => 'Disabled',
    default => 'Unknown',
};

Chuyển đổi này được thực hiện bởi quy tắc Php80/Rector/Switch_/SwitchToMatchRector, quy tắc này sẽ nhận diện thông minh các cấu trúc switch có thể chuyển đổi và áp dụng cú pháp mới của PHP 8.0.

Cải thiện chất lượng mã: Loại bỏ mã dư thừa

Rector tích hợp 45 quy tắc phát hiện mã chết, ví dụ như tự động loại bỏ các biến và phương thức không sử dụng. Dưới đây là một ví dụ điển hình về tối ưu hóa mã:

// Trước khi tái cấu trúc
class UserController {
    public function getUser($id) {
        $user = User::find($id);
        $timestamp = time(); // Biến không sử dụng
        return $user;
    }
    
    private function unusedMethod() { // Phương thức không sử dụng
        return 'This line will never be executed';
    }
}

// Sau khi tái cấu trúc
class UserController {
    public function getUser($id) {
        return User::find($id);
    }
}

Việc tối ưu hóa này được thực hiện bởi DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodRectorDeadCode/Rector/Variable/RemoveUnusedVariableRector.

Phân loại quy tắc tái cấu trúc tự động

Rector cung cấp hơn 382 quy tắc tái cấu trúc, bao phủ từ cú pháp cơ bản đến các tình huống đặc thù của framework. Các loại quy tắc chính bao gồm:

Loại quy tắc Số lượng Kịch bản áp dụng điển hình
Cải thiện chất lượng mã 69 Chuyển đổi array_push($arr, $item) thành $arr[] = $item
Tăng cường khai báo kiểu 57 Tự động thêm khai báo kiểu cho thuộc tính
Nâng cấp phiên bản PHP 10+ Chuyển đổi cú pháp từ PHP 7.4 lên 8.4
Quy ước đặt tên 6 Chuẩn hóa tên biến và phương thức
Tối ưu hóa trả về sớm 8 Chuyển đổi các điều kiện lồng nhau thành trả về sớm

Bạn có thể xem danh sách đầy đủ các quy tắc trong tài liệu chính thức.

Ứng dụng nâng cao: Tích hợp CI và quy tắc tùy chỉnh

Tự động hóa tích hợp liên tục

Tích hợp Rector vào quy trình CI để tự động tái cấu trúc mã khi commit:

# .github/workflows/rector.yml
name: Rector
on: [pull_request]

jobs:
  rector:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: shivammathur/setup-php@v2
        with:
          php-version: '8.2'
      - run: composer install --prefer-dist
      - run: vendor/bin/rector process src --dry-run

Tạo quy tắc tùy chỉnh

Khi các quy tắc tích hợp không đáp ứng nhu cầu, bạn có thể tạo quy tắc tùy chỉnh. Rector cung cấp trình tạo mẫu quy tắc:

vendor/bin/rector generate-rule --name "App\Rector\MyCustomRector"

Tệp quy tắc được tạo sẽ nằm ở src/Rector/MyCustomRector.php, cung cấp một khung hoàn chỉnh để thao tác với AST.

Lưu ý và các thực tiễn tốt nhất

  1. Sao lưu mã: Nên cam kết mã vào hệ thống kiểm soát phiên bản trước khi thực hiện tái cấu trúc.
  2. Áp dụng từng bước: Trước tiên, hãy sử dụng --dry-run để xem trước các thay đổi, sau đó mới thực hiện tái cấu trúc thực tế.
  3. Kết hợp với quy ước mã hóa: Rector không xử lý định dạng mã; bạn cần sử dụng kết hợp với các công cụ như Easy Coding Standard.
  4. Xử lý tệp PHP kiêm HTML: Sau khi tái cấu trúc các tệp PHP chứa HTML, hãy xác minh lại thủ công.

Quy trình làm việc được đề xuất từ tài liệu chính thức là: Rector tái cấu trúc → ECS định dạng → PHPStan phân tích tĩnh. Sự kết hợp này đảm bảo cải thiện toàn diện chất lượng mã.

Tóm tắt và triển vọng

Rector đã thay đổi hoàn toàn cách bảo trì các dự án PHP thông qua công nghệ tái cấu trúc tự động. Nó không chỉ giải quyết các vấn đề nan giải về nâng cấp phiên bản mà còn đảm bảo chất lượng mã luôn ở mức cao thông qua cơ chế tái cấu trúc liên tục. Khi PHP 8.4 và các phiên bản tiếp theo được phát hành, Rector sẽ tiếp tục mở rộng thư viện quy tắc của mình, cung cấp sự hỗ trợ tự động hóa mạnh mẽ hơn cho hệ sinh thái PHP.

Thẻ: rector php tái cấu trúc nâng cấp phiên bản AST

Đăng vào ngày 19 tháng 7 lúc 19:41