分析器介面


所有與 Exercism 網站的互動都會自動處理。分析器的唯一職責,是接收一份解答,並回傳狀態與任何訊息。

執行

  • 分析器應提供一支可執行的腳本。更多資訊可以在 docker.md 檔案中找到。
  • 腳本會收到三個參數:
    • 練習的 slug(例如two-fer)。
    • 內含提交檔案的目錄路徑(結尾帶斜線)。
    • 輸出目錄的路徑(結尾帶斜線)。這個目錄可以寫入。
  • 腳本必須將 analysis.json 檔案寫入輸出目錄。
  • 腳本應將 tags.json 檔案寫入輸出目錄。

允許的執行時間

每份解答有 20 秒的時間,分析器可以使用 100% 的機器資源。 20 秒之後,行程會被中止,並回報逾時。

Note

我們強烈建議遵循我們的效能最佳實踐文件,以降低逾時的機率。

輸出格式

analysis.json

analysis.json 檔案的結構應如下:

{
  "summary": "This solution looks good but has a few points to address",
  "comments": [
    {
      "comment": "ruby.general.some_parameterised_message",
      "params": { "foo": "param1", "bar": "param2" },
      "type": "essential"
    },
    {
      "comment": "ruby.general.some_unparameterised_message",
      "params": {},
      "type": "actionable"
    },
    {
      "comment": "ruby.general.some_unparameterised_message"
    },
    "ruby.general.some_unparameterised_message"
  ]
}

summary(選填)

summary 欄位是一個文字(非 Markdown)欄位,用來摘要輸出內容。 它可能會寫出類似「你的解答就快完成了,只要再做兩個小調整就好」或「程式碼運作得很好,只是還有一點 lint 需要處理」這樣的內容。 這個摘要會顯示在網站上、評論的上方。

comments

comments 欄位是一個評論陣列,這些評論會連結到 exercism/website-copy 中的 Markdown 文件(詳情請見撰寫分析器評論)。 陣列中的每個值都是指標字串,或是格式如下的 JSON 物件:

comment

指向 website-copy 中某個檔案的指標字串。

params(選填)

一個 JSON 物件,內含任何在呈現時要內插替換的參數。 舉例來說,你可以在 Markdown 檔案中寫下 Try %{variable_name} += 1 instead,然後把 params 設為 { "variable_name": "foo"},藉此將 %{variable_name} 替換成學生實際使用的變數。

使用參數化檔案時,請務必為所有用到的 % 跳脫,在它前面再加上一個 %。 例如 Try aim aim for 100%% of the tests passing。

type(選填)

以下這些 type 都是有效的:

  • essential:在學生處理完這則評論之前,我們會對他們進行軟性封鎖
  • actionable:任何給予使用者具體指示以改善解答的評論
  • informative:提供資訊的評論,但不一定期望學生採用。例如在 Ruby 中,如果有人在 TwoFer 裡使用了字串串接,我們也會告訴他們字串格式化,但不會建議這是更好的做法。
  • celebratory:告訴使用者他們做對了的評論,可能是對解答的整體評論,也可能是針對某個技巧。

沒有 type 欄位的評論,預設為 informative 。

目前網站上,我們會因為 essential 評論而軟性封鎖,並鼓勵學生在練習題上標記為完成之前,先處理完 actionable 評論(但概念練習不用),不過不會對 informative 或 celebratory 評論建議任何動作。 不過未來我們可能會為其他類型加上表情符號或指示標記,或把它們另外分組。

tags.json

tags.json 檔案的結構應如下:

{
  "tags": [
    "construct:list",
    "paradigm:functional",
    "technique:higher-order-functions",
    "uses:List.unfold"
  ]
}

tags

tags 欄位是一個字串陣列。 每個標籤的格式為:"<category>:<thing>"。

例如:

  • "paradigm:functional"
  • "technique:recursion"
  • "construct:bitwise-and"
  • "uses:DateTime.add_seconds"

標籤可以用來辨識一份解答使用了哪些結構、技巧或範式。

更多資訊請見為解答加上標籤。

除錯

每次執行的 stdout 和 stderr 內容都會保存到檔案中,之後可以查看。

你可以寫入一個 analysis.out 檔案,裡面放你之後想查看的除錯資訊。

延伸閱讀

在建立分析器之前,請先閱讀我們的分析器指南。