0
0
Lập trình
Admin Team
Admin Teamtechmely

Kết Nối "Mile Cuối" với LSP: Câu Chuyện về blink.cmp cho Neovim & Unreal Engine

Đăng vào 1 tháng trước

• 4 phút đọc

Tóm Tắt

LSP trong Neovim gặp khó khăn trong việc hoàn thành nhiều macro và specifiers đặc thù của Unreal Engine. Để khắc phục "khoảng cách cuối cùng" này, tôi đã tạo ra blink-cmp-unreal, một nguồn hoàn thiện tùy chỉnh cho blink.cmp. Với sự bổ sung này, bạn sẽ nhận được sự hoàn thiện chính xác cho các từ khóa đặc thù của UE, nâng cao trải nghiệm phát triển.


Giới Thiệu

Chào các bạn! Như thường lệ, tôi đang tập trung vào việc tạo ra các plugin để giúp phát triển với Unreal Engine trong Neovim trở nên dễ dàng hơn một chút. (Thật lòng mà nói, tôi cảm thấy mình đang ngày càng xa rời mục tiêu ban đầu là "thực sự tạo ra điều gì đó trong UE", nhưng đó là một câu chuyện cho ngày khác...!)

Lần này, tôi muốn chia sẻ câu chuyện về một plugin mới mà tôi đã hoàn thành: blink-cmp-unreal, một nguồn hoàn thiện tùy chỉnh cho plugin hoàn thiện yêu thích của tôi, blink.cmp.

Rào Cản Không Thể Vượt Qua Chỉ Bằng LSP

Phát triển với Unreal Engine liên quan đến rất nhiều macro đặc biệt như UCLASS, UPROPERTY, và UFUNCTION, cùng với vô số "specifiers" được sử dụng bên trong chúng, chẳng hạn như BlueprintReadWritemeta.

Thường thì, nếu bạn bao gồm các header như #include "CoreMinimal.h" ở đầu các tệp .h của mình, LSP của bạn sẽ cố gắng giải thích một số trong số chúng. Tuy nhiên, nó thường không theo dõi tất cả các định nghĩa, thường để bạn không có ứng viên hoàn thiện ngay khi bạn cần nhất.

blink-cmp-unreal đã ra đời để lấp đầy "khoảng cách cuối cùng" đáng thất vọng này.

Cài Đặt và Thiết Lập

Bắt đầu rất đơn giản nếu bạn đang sử dụng lazy.nvim.

Copy
return {
  {
    "Saghen/blink.cmp",
    dependencies = {
      { "taku25/blink-cmp-unreal" },
    },
    opts = {
      sources = {
        default = { "lsp", "buffer", "path", "unreal" },
        providers = {
          unreal = {
            module = "blink-cmp-unreal",
            name = "unreal",
            score_offset = 15,
          },
        },
      },
    },
  },
}

Với chỉ một thiết lập như vậy, các specifiers macro của UE sẽ bắt đầu hoàn thiện mượt mà trong các vị trí như UCLASS().

Tùy Chỉnh Linh Hoạt

Nếu một số hoàn thiện trùng lặp với LSP của bạn? Không vấn đề gì. Bạn có thể vô hiệu hóa các nhóm hoàn thiện cụ thể thông qua các tùy chọn của plugin.
Chỉ cần thêm một bảng opts vào phần providers.unreal với bất kỳ cài đặt nào sau đây:

Tùy Chọn Mặc Định Mô Tả
enable_uclass true Bật hoàn thiện cho các specifiers UCLASS.
enable_uproperty true Bật hoàn thiện cho các specifiers UPROPERTY.
enable_ufunction true Bật hoàn thiện cho các specifiers UFUNCTION.
enable_ustruct true Bật hoàn thiện cho các specifiers USTRUCT.
enable_uenum true Bật hoàn thiện cho các specifiers UENUM.
enable_uinterface true Bật hoàn thiện cho các specifiers UINTERFACE.
enable_meta_specifiers true Bật hoàn thiện cho các từ khóa bên trong các specifiers meta (ví dụ: DisplayName).
enable_delegate_macros true Bật hoàn thiện cho các macro liên quan đến delegate (ví dụ: DECLARE_DELEGATE).
enable_module_macros true Bật hoàn thiện cho các macro liên quan đến module (ví dụ: IMPLEMENT_MODULE).
enable_log_levels true Bật hoàn thiện cho các cấp độ log được sử dụng trong UE_LOG (ví dụ: Log, Warning).
enable_slate_macros true Bật hoàn thiện cho các macro của framework UI Slate (ví dụ: SLATE_BEGIN_ARGS).

Mẹo Tối Ưu Hiệu Suất

  • Sử Dụng Cache: Nếu bạn thấy rằng thời gian hoàn thiện chậm, hãy kiểm tra xem có thể cache các kết quả hoàn thiện hay không để giảm tải cho LSP.
  • Tùy Chỉnh Cấu Hình: Điều chỉnh các tùy chọn hoàn thiện để phù hợp hơn với quy trình làm việc của bạn.

Lỗi Thường Gặp và Giải Quyết

  • LSP Không Hoạt Động: Nếu LSP không hoạt động, hãy đảm bảo rằng bạn đã cài đặt tất cả các phụ thuộc cần thiết và header đã được bao gồm đúng cách.
  • Hoàn Thiện Không Hoạt Động: Kiểm tra xem bạn đã bật các tùy chọn hoàn thiện cần thiết trong cấu hình của mình chưa. Nếu không, hãy cập nhật lại.

Kết Luận và Tương Lai

Với sự hoàn thành của plugin này, tôi cảm thấy bộ công cụ mà tôi đang xây dựng đã được hoàn thiện để đáp ứng hầu hết các nhu cầu cơ bản cho phát triển UE trong Neovim: Xây dựng, Tạo lớp, Tìm kiếm tệp, Ghi log, Đánh dấu, và giờ là Hoàn thiện.

Tất nhiên, vẫn còn những tính năng nâng cao có trong các IDE hoàn chỉnh như Rider, chẳng hạn như việc hiển thị các tài sản Blueprint đang sử dụng một lớp C++ cụ thể. Tuy nhiên, việc đạt được điều đó có thể cần phân tích nhị phân, một nhiệm vụ khó khăn cho một lập trình viên độc lập.

Thay vào đó, ưu tiên ngay lập tức của tôi là hỗ trợ đa nền tảng. Hiện tại, tôi chỉ phát triển và thử nghiệm trong môi trường Windows, vì vậy tôi rất muốn đảm bảo tất cả các plugin này hoạt động chính xác trên Mac và Linux nữa.

Hy vọng bài viết này hữu ích cho bất kỳ ai đang đối mặt với thách thức phát triển cho Unreal Engine trong Neovim.


Bạn có mẹo hoặc công cụ nào cho phát triển UE trong Neovim không? Nếu bạn có bất kỳ plugin hoặc cấu hình hữu ích nào, tôi rất muốn nghe chúng trong phần bình luận!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào