tháng 6 22, 2021

Elixir với Visual Studio Code

Elixir với Visual Studio Code

Nhắc đến Visual Studio Code (gọi tắt là VSCode) thì chắc là ai cũng biết nên mình không giới thiệu chi tiết nữa. Chỉ xin được liệt kê một số điểm chính:

  • Là editor cực kỳ mạnh mẽ nhưng lại rất dễ sử dụng của Microsoft. Phần lớn source code được Microsoft công khai dưới dạng mã nguồn mở trên repo github microsoft/vscode dưới MIT license.
  • Hỗ trợ đa nền tảng (Windows, MacOS, Linux). Các phiên bản của VSCode liên tục được Microsoft cập nhật tại trang chủ Visual Studio Code dưới dạng free-ware.
  • Có tích hợp sẵn tính năng source control (git, mercurial, svn, ...) và debug.
  • Kho extension cực kỳ phong phú, hỗ trợ hầu hết các ngôn ngữ lập trình.
  • Cho phép tùy biến giao diện với kho theme khổng lồ.

Cài đặt với Elixir và Phoenix

Để lập trình Elixir (hay Phoenix) trên VSCode, ta không cần cài đặt thêm bất cứ thứ gì nhưng để việc lập trình Elixir được thuận tiện, nâng cao hiệu suất làm việc thì các extension dưới đây giúp ích được cho ta rất nhiều.

Language Server và Elixir Code extension

Language Server hỗ trợ tất cả các công việc chính như code completion; format code; hiển thị docs; go-to-definition; find-references và một cơ số việc khác nữa. Hiện tại, có hai extension chính, đó là:

Hai extension này gần tương đương nhau về mặt tính năng, không thể cùng lúc sử dụng cùng nhau nên chỉ có thể chọn một trong hai. Nhìn qua số lượng download thì vscode-elixir nhỉnh hơn so với ElixirLS nhưng rating thì ElixirLS lại cao hơn chút so với vscode-elixir. Thêm vào đó, bản cập nhật cuối cùng của vscode-elixir đã là cách đây gần 4 năm ( 1/11/2017) trong khi ElixirLS vẫn đang tiếp tục được hoàn thiện với lần cập nhật gần nhất là 6/4/2021 nên mình đã chọn ElixirLS.

Làm việc với template file

ElixirLS hỗ trợ rất tốt với file .ex.exs của Elixir, tuy nhiên khi làm việc với Phoenix, ta phải làm việc thêm với 2 loại template file là .eex.leex.

ElixirLS cũng đã định danh 2 loại Phoenix template là html-eex, nhưng nếu VSCode vẫn không nhận ra 2 loại file này, ta cần thêm đoạn config sau vào file settings.json của VSCode.

"files.associations": {
        "*.eex": "html-eex",
        "*.leex": "html-eex"
    },
Tích hợp với Emmet

Để Emmet hoạt động tốt với template file, ta cần thêm đoạn config sau vào file settings.json.

"emmet.includeLanguages": {
  "html-eex": "html"
}
Format code

Có 2 extension phổ biến nhất là

Prettier được đánh giá tốt hơn Beautify và số lượng download của 2 extension đã phản ảnh khá rõ điều đó. Tuy nhiên Prettier lại hoạt động không tốt với Phoenix file template bằng Beautify (tham khảo tại đâyđây) nên có vẻ Beautify là sự lựa chọn hợp lý.

Ở phần định nghĩa html file type của beautify trong file settings.json, ta chỉ việc thêm mục html-eex như sau.

"beautify.language": {
        "js": {
            "type": [
                "javascript",
                "json",
                "jsonc"
            ],
            "filename": [
                ".jshintrc",
                ".jsbeautifyrc"
            ]
        },
        "css": [
            "css",
            "less",
            "scss"
        ],
        "html": [
            "htm",
            "html",
            "html-eex"
        ]
    },

Nice-to-have extensions

Bên cạnh các core-extension đã trình bày ở phần trên, ta có thể cài đặt thêm các nice-to-have extensions để thuận tiện hơn khi code Elixir.

Snippet
Gettext file
Linter
Others

P/S: Nếu sử dụng Emacs, bạn có thể tham khảo Elixir với Emacs.