Easy App
กลับไปหน้ารีวิว Repo
รีวิว Repoร่าง

รีวิว @shadcn/lint — linter สำหรับ Tailwind ที่เขียน error ให้ AI agent แก้เองได้

vibe-coder
รีวิว @shadcn/lint — linter สำหรับ Tailwind ที่เขียน error ให้ AI agent แก้เองได้

ข้อมูล Repo

shadcn-ui/lint
ภาษา
TypeScript
ดาว
3,160
สร้างเมื่อ
แก้ไขล่าสุด
ร่าง

เปลี่ยนสถานะผ่าน API: PATCH /api/reports/7ea1024b-8a5a-41f3-966a-a9c86c748746

แคปชันสำหรับ Facebook

AI agent เขียน UI แล้ว className มั่วเรื่อง spacing สี หรือขนาดเองบ่อยไหมครับ @shadcn/lint คือ linter ที่ออกแบบมาให้ agent อ่าน error แล้วแก้ได้จริง ไม่ใช่แค่บอกว่าผิด ✅ ตั้งกฎ design system เอง แล้ว error จะแนะนำวิธีแก้จาก components, variants และ theme ของเรา ✅ มี contracts แยกกฎราย component เช่น CardTitle เปลี่ยน typography ได้ แต่เปลี่ยน font ไม่ได้ ✅ รองรับทั้ง ESLint และ Oxlint ใช้กับ React, Vue, Svelte ได้ ✅ ทำงานกับ Tailwind v4 โดยไม่บังคับว่าต้องใช้ shadcn/ui ไม่ต้อง fork หรือห่อ component ✅ README ระบุว่าทดสอบกับ coding agent มากกว่า 150 task runs เหมาะกับทีมที่มี design system อยู่แล้ว และอยากให้ agent เขียน UI ให้ตรงกฎโดยไม่ต้องไปรื้อ API ของ component 🔗 https://github.com/shadcn-ui/lint #shadcn #Tailwind #AIAgents #DesignSystem #OpenSource

ภาพปกแบบ HTML สด

แสดงจาก HTML ต้นฉบับที่ใช้สร้างภาพ ดาวน์โหลดเป็น PNG 1080×1350 ได้ทันที

สรุป

@shadcn/lint เป็น agent-first linter สำหรับโปรเจกต์ Tailwind v4 ที่ให้เราตั้งกฎ design system เอง พอ agent เขียน className ผิด ข้อความ error จะบอกว่าผิดตรงไหนและควรใช้อะไรแทน รองรับ ESLint กับ Oxlint และใช้กับ React, Vue, Svelte โดยไม่บังคับว่าต้องใช้ shadcn/ui

คืออะไร

@shadcn/lint (repo shadcn-ui/lint) เป็น linter ที่ทำงานกับ Tailwind v4 project โดยไม่ได้บังคับว่าต้องใช้ shadcn/ui คอนเซปต์หลักคือ “คุณกำหนดว่าอะไรที่อนุญาต” แล้วเมื่อ agent เขียนโค้ดผิดกฎ ข้อความ error จะอธิบายว่าผิดอะไร และแนะนำวิธีแก้จาก components, variants และ theme ของเราเอง

เขียนด้วย TypeScript, MIT License, มี ⭐ 3,160 | forks 63 | open issues 11 (ข้อมูล ณ 11 ต.ค. 2026)

จุดเด่น

  • error message ยกตัวอย่างจริงจาก README: <Button> owns its spacing. Use a size (sm, lg), or margin here or gap on the parent for space around it. คือมันบอกวิธีแก้ ไม่ใช่แค่บอกว่าผิด
  • ต่างจากการบังคับด้วย TypeScript type ตรงๆ: README อธิบายว่า TS error แค่บอกว่า padding ไม่อนุญาต แต่ไม่ได้บอกว่าจะขนาด Button ยังไง ส่วน linter บอก guidance มาจาก design system
  • contracts ให้กำหนดกฎแยกเป็นราย component เช่น อนุญาตให้ CardTitle เปลี่ยน typography ได้แต่เปลี่ยน font ไม่ได้ ขณะที่ CardContent เปลี่ยน spacing ได้แต่ typography ไม่ได้
  • custom messages และ placeholders เขียนเองได้ เช่น Use a {{component}} size: {{sizes}}. หรือชี้ไปหา theme color ที่ {{file}}
  • รองรับ 6 rules: no-restyle, no-raw-colors, no-arbitrary-values, no-inline-styles, no-unknown-classes, require-static-classes
  • ใช้ได้ทั้ง ESLint และ Oxlint และใช้กับ React, Vue, Svelte โดยไม่ต้อง fork component หรือเขียน wrapper (README: “No forks. No wrappers.”)
  • เอกสารระบุว่าทดสอบกับ coding agents มากกว่า 150 task runs และในตารางผลของ Sonnet 5, Haiku 4.5, Opus 5, GPT 5.6 Terra ลด error เหลือ 0 หลังรับ lint feedback หนึ่งรอบแก้ (GPT 5.6 Sol ทำได้ 6/8) พร้อมบอกว่าใน control runs ของ Claude การแก้ด้วย lint feedback คุ้มกว่ากฎอย่างเดียว 10%-48%

เหมาะกับใคร

  • ทีมที่ใช้ coding agent เขียน UI แล้วเจอปัญหา agent ไปเขียน className มั่วเช่น padding, raw color, arbitrary value ที่ขัดกับ design system
  • คนที่มี design system อยู่แล้ว (Tailwind v4) และอยากบังคับกฎโดยไม่ต้องแก้ API ของ component เดิม
  • คนที่ใช้ component จาก third-party package และอยากบังคับกฎกับมันโดยไม่ต้อง fork
  • องค์กรที่ต้องการ share config ของ design system เดียวกันไปหลายโปรเจกต์ แต่ละโปรเจกต์เพิ่มกฎของตัวเอง

เริ่มต้นใช้งาน

วิธีที่ README แนะนำคือส่ง prompt นี้ให้ coding agent:

Read https://github.com/shadcn-ui/lint/blob/main/SETUP.md
and set up @shadcn/lint in this project.

ถ้าตั้งค่าเอง ตัวอย่างสำหรับ React กับ ESLint (ต้องใช้ Node.js 20.19 ขึ้นไป และ ESLint 9.30 ขึ้นไป):

npm install -D @shadcn/lint eslint @typescript-eslint/parser
import { plugin as shadcn } from "@shadcn/lint"
import tsParser from "@typescript-eslint/parser"
import { defineConfig } from "eslint/config"

export default defineConfig([
  {
    files: ["**/*.{js,jsx,ts,tsx}"],
    languageOptions: {
      parser: tsParser,
      parserOptions: { ecmaFeatures: { jsx: true } },
    },
    plugins: { shadcn },
    rules: {
      "shadcn/no-arbitrary-values": "error",
    },
  },
])
npx eslint .

ถ้าอยากใช้ Oxlint (ต้องใช้ Oxlint 1.80 ขึ้นไป) ติดตั้งแบบนี้และสร้าง .oxlintrc.json:

{
  "jsPlugins": ["@shadcn/lint"],
  "rules": {
    "shadcn/no-arbitrary-values": "error"
  }
}
npx oxlint

หลังตั้งเสร็จ README แนะนำให้เพิ่มคำสั่ง lint เป็น script lint ใน package.json แล้วใส่ใน AGENTS.md ว่า:

After making changes, run `npm run lint` and fix all errors.

Vue และ Svelte มีวิธีติดตั้งแยกในหน้า React, Vue, Svelte ของ docs ครับ

ข้อควรรู้

  • License: MIT License ใช้เชิงพาณิชย์ได้ตามเงื่อนไข MIT ปกติ
  • ความสดใหม่: push ล่าสุด 11 ต.ค. 2026, โปรเจกต์สร้างเมื่อ 2 ก.ย. 2026 อายุราว 1 เดือน ยังใหม่และเปลี่ยนตัวเร็ว ควรลองกับโปรเจกต์จริงก่อน
  • ข้อจำกัดด้านเวอร์ชัน: ต้องเป็น Tailwind v4, Node.js 20.19 ขึ้นไป, ESLint 9.30 ขึ้นไป หรือ Oxlint 1.80 ขึ้นไป
  • Oxlint อ่านเฉพาะ block <script> ของไฟล์ .vue และ .svelte ไม่ได้อ่าน template/markup ตามที่ README ระบุ
  • ถ้าเฟรมเวิร์กของคุณตั้ง ESLint ไว้แล้ว README แนะนำให้คง parser setup เดิมไว้ แล้วเพิ่ม plugin กับ rule เข้าไป
  • ตัวเลข eval ในหัวข้อ Built for agents เป็นผลจาก test ของผู้พัฒนาเอง และมีบางโมเดลทำได้ไม่ครบ 8/8 (GPT 5.6 Sol ทำได้ 6/8) วิธีวัดละเอียดอยู่ใน docs/evals.md
  • ตัวอย่างใน README ส่วนใหญ่ใช้ className ซึ่งเป็น React style

🔗 https://github.com/shadcn-ui/lint

ข้อมูลจาก GitHub ณ 11 ต.ค. 2026: ⭐ 3,160 | ภาษา TypeScript | license MIT

ไฟล์แนบ (3)

Easy App — กล่องรายงานจาก AI
v0.7.1 (1496eed)