Learn Some Rust During Hacktoberfest

Matthias Endler

趁 Hacktoberfest 學點 Rust

原文由 Matthias Endler 發布,訂閱此部落格

Dirndl, Lederhose, Brezn, Beer, Rust
Dirndl, Lederhose, Brezn, Beer, Rust
來源: Designed by Freepik

十月是貢獻開源專案的最佳時機——至少 GitHub 和 DigitalOcean 是這麼認為的。因為他們會在這個時候舉辦 Hacktoberfest,這是一場全球性的活動,只要建立 pull request,就能獲得一件免費 T 恤和滿滿的聲望。官方公告請見這裡

有些人認為自己無法做出有價值的貢獻。可能是因為缺乏程式能力,或是不知道該從哪裡開始。

這篇指南就是要改變這種想法!

讓我來告訴你,每個人都能如何為Rust這個安全的系統程式語言貢獻程式碼。會寫這篇文章,是受到來自 llogiq 的一則推文啟發。

1. 找一個很棒的 Rust 專案來參與

我們都希望自己的努力能被看見。
因此我建議從中型專案開始貢獻,因為這類專案已經有了一定的動能,但仍由少數維護者主導,所以隨時都歡迎有人幫忙。相比之下,迷你專案大多只對原作者有用,而大型專案一開始往往讓人望而生畏,規範也更為嚴格。

現在,讓我們來看看今年內有更新、獲得 5 到 100 顆星的儲存庫。GitHub 支援基於 Lucene 語法的進階搜尋選項

language:Rust stars:5..100 pushed:>2017-01-01

這裡就是符合這個篩選條件的專案清單。

2. 安裝 Rust 工具鏈

要開始貢獻,我們需要可運作的 Rust 編譯器和 cargo 套件管理器。幸好,安裝過程應該相當簡單。我推薦使用rustup來安裝。

在終端機中執行以下指令,然後依照畫面上的指示操作。

curl https://sh.rustup.rs -sSf | sh

如果不確定怎麼選,就直接接受預設值。安裝完成後,我們之後還需要取得編譯器的 nightly 版本。

rustup install nightly

到目前為止有問題嗎?更詳細的安裝說明請參考這裡

3. Fork 專案並複製到你的電腦上

首先,點擊 GitHub 專案頁面右上角小小的fork按鈕。接著把你 fork 的專案複製到自己的電腦上。

git clone [email protected]:yourusername/project.git

更詳細的操作說明請見這裡

4. 可以建置嗎?

在開始修改程式碼之前,我們應該先確認專案處於可運作的狀態。在專案資料夾內,以下指令應該能直接執行成功。

cargo build
cargo test

如果不行,你可以參考README裡的進一步說明。(不過,也歡迎直接換個專案試試。)

5. 祕密武器

祕訣在這裡:我們要用一個程式碼檢查工具(linter),也就是clippy,來幫我們找出任何 Rust 程式碼庫中可以改進的地方。

要取得 clippy,請這樣安裝:

cargo +nightly install clippy

之後,就可以在專案根目錄下隨時執行它。

rustup run nightly cargo clippy

這樣應該就能得到關於如何改進程式碼庫的具體建議。

以下是範例輸出:

warning: useless use of `format!`
   --> src/mach/header.rs:420:49
    |
420 |             let error = error::Error::Malformed(format!("bytes size is smaller than an Mach-o header"));
    |                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: #[warn(useless_format)] on by default
    = help: for further information visit https://rust-lang-nursery.github.io/rust-clippy/v0.0.165/index.html#useless_format

warning: this expression borrows a reference that is immediately dereferenced by the compiler
   --> src/mach/header.rs:423:36
    |
423 |             let magic = mach::peek(&bytes, 0)?;
    |                                    ^^^^^^ help: change this to: `bytes`
    |
    = help: for further information visit https://rust-lang-nursery.github.io/rust-clippy/v0.0.165/index.html#needless_borrow

試著採用其中一些建議,看看專案是否仍能正常編譯、測試是否仍能通過。想了解更多,可以查看說明區塊中附的文件連結。從小地方開始改,會讓你的變更更容易被審核。

6. 建立 Pull Request

如果你對自己的修改感到滿意,現在就是發佈它們的時候了!最好為你的變更建立一個新分支,然後推送到你 fork 的版本上。

git checkout -b codestyle
git commit -am "Minor codestyle fixes"
git push --set-upstream origin codestyle

接著,前往 GitHub 上你 fork 的專案首頁。應該會看到一個標示為Compare & pull request的按鈕。請加上有意義的說明,然後送出 pull request。

恭喜!你已經為 Rust 生態系做出貢獻了。謝謝你!🎉

戰利品展示櫃

加碼放送!

如果覺得手動修正和檢查太無聊,你可以用 Pascal Hertleif(@killercup)開發的rustfix來自動化第 5 個步驟:

rustfix --yolo && cargo check

本文章由 muse-spark-1.2-contributor 進行翻譯

留言