AgentStack
SKILL verified MIT Self-run

Luau Lint

skill-codephobiia-claude-roblox-game-studio-luau-lint · by CodePhobiia

Static analysis of Luau code. Checks for type annotation coverage, deprecated API usage, naming convention compliance, and common anti-patterns. Uses `selene` if available or manual grep patterns.

No reviews yet
0 installs
0 views
view→install

Install

$ agentstack add skill-codephobiia-claude-roblox-game-studio-luau-lint

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Luau Lint? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

/luau-lint — Luau Static Analysis

Steps

1. Check if selene is installed

selene --version 2>/dev/null

If selene IS available:

selene src/

Parse the output and present findings grouped by severity.

If selene is NOT available:

Fall back to manual grep-based checks.

Manual Lint Checks (grep-based fallback)

Deprecated API Usage (CRITICAL)

# Find wait() usage (not task.wait)
grep -rn "[^.]wait(" src/ --include="*.lua" --include="*.luau" | grep -v "task.wait\|:Wait"

# Find spawn() usage (not task.spawn)
grep -rn "[^.]spawn(" src/ --include="*.lua" --include="*.luau" | grep -v "task.spawn"

# Find delay() usage
grep -rn "[^.]delay(" src/ --include="*.lua" --include="*.luau" | grep -v "task.delay"

Print Statements (should be logged, not printed)

grep -rn "print(" src/ --include="*.lua" --include="*.luau" | grep -v "^[^:]*:--"

Missing Type Annotations (basic heuristic)

# Look for `function ModuleName.xyz(` without type annotations
grep -rn "function [A-Za-z]*\.[a-z][a-zA-Z]*(" src/ --include="*.lua" --include="*.luau"

Manually check if these have : ReturnType annotations.

Missing pcall on DataStore/HttpService

grep -rn "DataStoreService\|HttpService\|MarketplaceService" src/ --include="*.lua" --include="*.luau" -A 3 | grep -B 1 "Async\|Post\|Get"

Manually check surrounding code for pcall wrapping.

Hardcoded Magic Numbers in Gameplay Code

grep -rn "[^a-zA-Z_][0-9]\{2,\}" src/ --include="*.lua" --include="*.luau" | grep -v "UDim2\|Vector3\|Color3\|Enum\|^[^:]*:--"

Manual review for magic numbers that should be in config.

Naming Conventions

# PascalCase modules (files)
find src/ -name "*.lua" -o -name "*.luau" | grep -v "/[A-Z][a-zA-Z]*\.lua"

# Check for `function myFunc` (should be `function MyFunc` if public or `local function myFunc` if private)
grep -rn "^function [a-z]" src/ --include="*.lua" --include="*.luau"

Output Format

# Luau Lint Report

## Summary
- Files scanned: X
- Errors: X
- Warnings: X
- Info: X

## Errors (must fix)
### Deprecated API Usage
- `src/ServerScriptService/Foo.lua:42` — `wait(1)` should be `task.wait(1)`
- ...

### Missing pcall
- `src/ServerStorage/PlayerData.lua:18` — DataStore:SetAsync() without pcall

## Warnings
### Print Statements
- `src/ServerScriptService/Combat.lua:95` — `print("hit")` (remove or route to logger)

### Magic Numbers
- `src/ServerScriptService/Combat.lua:102` — `damage = 50` (should be configurable)

## Info
### Naming Suggestions
- ...

Present the report to the user. Offer to delegate fixes to lead-programmer.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.