go-linters

द्वारा github

gh-aw में कस्टम Go विश्लेषण लिंटर्स जोड़ें और मान्य करें।

npx skills add https://github.com/github/gh-aw --skill go-linters

Go Linters

Use this guide when adding a new custom Go analysis linter in this repository.

For PR-driven linter generation (derive a rule from a specific pull request pattern), use .github/skills/pr-to-go-linter/SKILL.md.

Where to add a new linter

  1. Create a new package under pkg/linters/<linter-name>/.
  2. Define an analyzer in that package (exported as Analyzer).
  3. Add tests in the same package using analysistest with fixtures under testdata/src/....
  4. Register the analyzer in cmd/linters/main.go so it runs via the multichecker binary.

Build and test linters

  • Test only your linter package:
    • go test ./pkg/linters/<linter-name>/...
  • Build the custom linter runner:
    • go build ./cmd/linters
  • Run all custom linters across the repo:
    • make golint-custom

make golint-custom builds cmd/linters and runs it against ./cmd/... and ./pkg/....

Common AST pitfalls

Unwrap parenthesized expressions

Expressions wrapped in parentheses appear as *ast.ParenExpr. Unwrap expressions before asserting their AST type or comparing identifiers, so forms such as (nil) and (err) are handled like nil and err. Use the shared helper:

if ident, ok := astutil.UnwrapParenExpr(expr).(*ast.Ident); ok && ident.Name == "nil" {
	// Handle nil.
}

Match all relevant statement shapes

Semantically similar calls can appear in different statement nodes. A call that discards a result may be a bare *ast.ExprStmt or part of an *ast.AssignStmt; filtering only for one shape misses the other. Include and handle each relevant node shape:

nodeFilter := []ast.Node{(*ast.AssignStmt)(nil), (*ast.ExprStmt)(nil)}
return analyzerutil.Preorder(pass, nodeFilter, func(n ast.Node) {
	switch stmt := n.(type) {
	case *ast.AssignStmt:
		analyzeAssign(stmt)
	case *ast.ExprStmt:
		analyzeExpr(stmt)
	}
})

Before submitting a linter, check expression-shape assertions for parenthesis unwrapping and verify its node filter covers relevant equivalent syntax forms.

Coverage-aware perf gating

For linters that flag micro-optimizations (allocation/perf rules), only apply them on lines that tests actually exercise — "hot paths" — rather than on dead or rarely-executed code where the optimization brings no measurable benefit. Use the shared pkg/linters/internal/coverage package:

  1. In your analyzer file, register a -hot-threshold flag in init() (not as a var initializer, to avoid an Analyzer/run/flag initialization cycle):

    var hotThreshold *int
    
    func init() {
        hotThreshold = coverage.RegisterHotThresholdFlag(Analyzer)
    }
    
  2. Immediately before reporting a diagnostic, gate it with coverage.ShouldApply:

    if !coverage.ShouldApply(pass, node.Pos(), *hotThreshold) {
        return
    }
    

coverage.ShouldApply is permissive by default: when no coverage profile is loaded via the GH_AW_LINT_COVERAGE_PROFILE environment variable, or when hot-threshold is 0, it always returns true, preserving pre-coverage-aware behavior. Only wire this into linters whose fix has a genuine performance rationale (extra allocations, O(n²) behavior, etc.) — purely readability/style linters should not be coverage-gated.

Generating the coverage profile

go test -covermode=count -coverprofile=/tmp/coverage.out ./...
export GH_AW_LINT_COVERAGE_PROFILE=/tmp/coverage.out
make golint-custom

This profile is read once per linter-runner process. To lint only a specific subtree, scope the go test and golint-custom commands to the same package path.

github की और Skills

debugging-workflows
github
GitHub एजेंटिक वर्कफ़्लो को डीबग करने के लिए गाइड - लॉग का विश्लेषण, रन का ऑडिट, और समस्याओं का समाधान
go-codemod
github
gh aw fix कमांड के लिए Go कोडमॉड को लागू और परीक्षण करें।
acreadiness-policy
github
उपयोगकर्ता को AgentRC नीति चुनने, लिखने या लागू करने में सहायता करें। नीतियाँ अप्रासंगिक जाँचों को अक्षम करके, प्रभाव/स्तर को ओवरराइड करके, सेट करके तत्परता स्कोरिंग को अनुकूलित करती हैं…
ai-ready
github
किसी भी रिपॉजिटरी को AI-तैयार बनाएं — आपके कोडबेस का विश्लेषण करता है और AGENTS.md, copilot-instructions.md, CI वर्कफ़्लो, इश्यू टेम्पलेट और अधिक जनरेट करता है। आपकी PR समीक्षा को माइन करता है…
create-oo-component-documentation
github
वस्तु-उन्मुख घटकों के लिए उद्योग की सर्वोत्तम प्रथाओं और वास्तुकला दस्तावेज़ीकरण मानकों का पालन करते हुए व्यापक, मानकीकृत दस्तावेज़ीकरण तैयार करें।
dependabot
github
Dependabot GitHub का अंतर्निहित निर्भरता प्रबंधन उपकरण है जिसमें तीन मुख्य क्षमताएँ हैं:
doublecheck
github
AI आउटपुट के लिए तीन-स्तरीय सत्यापन पाइपलाइन। सत्यापन योग्य दावों को निकालता है, वेब खोज के माध्यम से समर्थन या विरोधाभासी स्रोत ढूंढता है, प्रतिकूल समीक्षा चलाता है…
foundry-agent-sync
github
Azure AI Foundry में REST API के माध्यम से स्थानीय JSON मैनिफेस्ट से प्रॉम्प्ट-आधारित AI एजेंट बनाएं और सिंक्रोनाइज़ करें। स्कैफोल्डिंग कौशल के विपरीत जो केवल…