Skip to content

Conversation

@github-actions
Copy link

Auto-generated PR to update rule-manifest.json when rules change.

## 🤖 Installing Claude Code GitHub App

This PR adds a GitHub Actions workflow that enables Claude Code
integration in our repository.

### What is Claude Code?

[Claude Code](https://claude.com/claude-code) is an AI coding agent that
can help with:
- Bug fixes and improvements  
- Documentation updates
- Implementing new features
- Code reviews and suggestions
- Writing tests
- And more!

### How it works

Once this PR is merged, we'll be able to interact with Claude by
mentioning @claude in a pull request or issue comment.
Once the workflow is triggered, Claude will analyze the comment and
surrounding context, and execute on the request in a GitHub action.

### Important Notes

- **This workflow won't take effect until this PR is merged**
- **@claude mentions won't work until after the merge is complete**
- The workflow runs automatically whenever Claude is mentioned in PR or
issue comments
- Claude gets access to the entire PR or issue context including files,
diffs, and previous comments

### Security

- Our Anthropic API key is securely stored as a GitHub Actions secret
- Only users with write access to the repository can trigger the
workflow
- All Claude runs are stored in the GitHub Actions run history
- Claude's default tools are limited to reading/writing files and
interacting with our repo by creating comments, branches, and commits.
- We can add more allowed tools by adding them to the workflow file
like:

```
allowed_tools: Bash(npm install),Bash(npm run build),Bash(npm run lint),Bash(npm run test)
```

There's more information in the [Claude Code action
repo](https://github.com/anthropics/claude-code-action).

After merging this PR, let's try mentioning @claude in a comment on any
PR to get started!
@github-actions github-actions bot force-pushed the auto/update-rule-manifest branch from 39d4f48 to 47996f2 Compare October 19, 2025 14:38
## Summary

This PR sets up the foundational infrastructure and build configuration
necessary for the TypeScript ESTree port into rslint. **This contains
only scaffolding and infrastructure - no actual parser implementation.**

### What's Included

- ✅ **Module Structure**: New Go module at `internal/typescript-estree/`
with organized packages
- ✅ **Build Configuration**: Makefile targets, go.mod, and workspace
updates
- ✅ **Type Definitions**: ESTree-compliant base types and interfaces
- ✅ **Test Infrastructure**: Working tests with parallel execution
support
- ✅ **CI/CD Integration**: Automatic inclusion in existing CI workflows
- ✅ **Documentation**: Comprehensive README and setup guide

### Directory Structure

```
internal/typescript-estree/
├── parser/          # Parsing logic (placeholder)
├── converter/       # AST conversion (placeholder)
├── types/           # ESTree type definitions
├── utils/           # Utility functions
├── testutils/       # Testing utilities
├── go.mod           # Module dependencies
└── README.md        # Documentation
```

### Verification

All infrastructure is verified to work:

```bash
# Tests pass
$ go test ./internal/typescript-estree/...
ok      github.com/web-infra-dev/rslint/internal/typescript-estree/converter (cached)
ok      github.com/web-infra-dev/rslint/internal/typescript-estree/parser    (cached)
ok      github.com/web-infra-dev/rslint/internal/typescript-estree/types     (cached)
ok      github.com/web-infra-dev/rslint/internal/typescript-estree/utils     (cached)

# Module dependencies resolve
$ cd internal/typescript-estree && go mod tidy
# No errors
```

### New Makefile Targets

```bash
make test-typescript-estree              # Run tests
make test-coverage-typescript-estree     # Run with coverage
make lint-typescript-estree              # Run linters
```

### What's NOT Included

- ❌ Parser implementation (pending)
- ❌ Converter implementation (pending)
- ❌ Comprehensive test coverage (pending)
- ❌ JSX support (pending)

This infrastructure must be merged first before any feature
implementation work can begin.

## Test plan

- [x] All tests pass: `go test ./internal/typescript-estree/...`
- [x] Module builds successfully
- [x] Dependencies resolve correctly
- [x] Linting configuration works
- [x] Documentation is complete

## Related Issues

Part of the TypeScript ESTree porting effort for rslint.

## References

- [TypeScript
ESTree](https://github.com/typescript-eslint/typescript-eslint/tree/main/packages/typescript-estree)
- [ESTree Specification](https://github.com/estree/estree)
- [TypeScript-Go](https://github.com/microsoft/typescript-go)
- [Setup Documentation](TYPESCRIPT_ESTREE_SETUP.md)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions bot force-pushed the auto/update-rule-manifest branch from 963bcca to c471b7a Compare October 19, 2025 15:34
delino bot and others added 2 commits October 20, 2025 08:13
## Summary

This PR implements TypeScript version compatibility checking, ported
from
[@typescript-eslint/typescript-estree](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-estree/src/version-check.ts)'s
version-check.ts.

### What's Included

- ✅ **Version Package**: New `internal/typescript-estree/version/`
package with complete implementation
- ✅ **Semantic Versioning**: Integration with Masterminds/semver for
robust version parsing and comparison
- ✅ **Version Detection**: Automatic TypeScript version detection and
validation
- ✅ **Compatibility Warnings**: Clear warnings for unsupported
TypeScript versions
- ✅ **Feature Flags**: `TypeScriptVersionIsAtLeast` map for
version-dependent features
- ✅ **Comprehensive Tests**: Full test coverage with 9 test suites, all
passing
- ✅ **Documentation**: Complete README and inline documentation

## Features

### 🔍 Version Detection
- Parses TypeScript version strings (stable, RC, and beta releases)
- Validates against a list of explicitly supported versions
- Thread-safe initialization using `sync.Once`
- Graceful handling of invalid version strings

### 📊 Version Comparison
- Semantic version constraint checking
- Support for pre-release versions (RC, beta)
- Both map-based and function-based version checks
- Dynamic version comparison for unlisted versions

### ✅ Supported Versions
Currently supports TypeScript 4.7 through 5.7:
```
4.7, 4.8, 4.9
5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7
```

### ⚠️ Warning System
- Automatic warnings for unsupported TypeScript versions
- One-time warning per program execution
- Clear messaging with supported version list
- Non-blocking warnings (graceful degradation)

## Implementation Details

### Core API

```go
// Initialize version checking
version.SetTypeScriptVersion("5.4.0")

// Check version compatibility
if version.IsVersionAtLeast("5.4") {
    // Use TypeScript 5.4+ features
}

// Get current version
currentVersion := version.GetCurrentVersion()

// Access pre-computed version map
if version.TypeScriptVersionIsAtLeast["5.0"] {
    // TypeScript 5.0 features available
}
```

### Version Comparison Logic

For a version check like `IsVersionAtLeast("5.4")`, the following
constraint is evaluated:
```
>= 5.4.0 || >= 5.4.1-rc || >= 5.4.0-beta
```

This ensures compatibility with:
- Stable releases (e.g., `5.4.0`, `5.4.5`)
- Release candidates (e.g., `5.4.1-rc`)
- Beta releases (e.g., `5.4.0-beta`)

## Testing

All tests pass with excellent coverage:

```bash
$ go test ./internal/typescript-estree/version/... -v
=== RUN   TestSetTypeScriptVersion
--- PASS: TestSetTypeScriptVersion (0.00s)
=== RUN   TestIsVersionAtLeast
--- PASS: TestIsVersionAtLeast (0.00s)
=== RUN   TestTypeScriptVersionIsAtLeast
--- PASS: TestTypeScriptVersionIsAtLeast (0.00s)
=== RUN   TestGetCurrentVersion
--- PASS: TestGetCurrentVersion (0.00s)
=== RUN   TestGetSupportedVersions
--- PASS: TestGetSupportedVersions (0.00s)
=== RUN   TestSemverCheck
--- PASS: TestSemverCheck (0.00s)
=== RUN   TestIsVersionSupported
--- PASS: TestIsVersionSupported (0.00s)
=== RUN   TestResetVersionCheck
--- PASS: TestResetVersionCheck (0.00s)
=== RUN   TestConcurrentVersionCheck
--- PASS: TestConcurrentVersionCheck (0.00s)
PASS
ok      github.com/web-infra-dev/rslint/internal/typescript-estree/version
```

### Test Coverage

- ✅ Version string parsing (stable, RC, beta)
- ✅ Semantic version comparison logic
- ✅ Supported version detection
- ✅ Pre-release version handling
- ✅ Concurrent access safety
- ✅ State reset (for testing)
- ✅ Edge cases and error handling

## Files Changed

### New Files
- `internal/typescript-estree/version/version.go` (170 lines)
  - Core version checking implementation
  - Version detection and comparison logic
  - Warning system
  
- `internal/typescript-estree/version/version_test.go` (317 lines)
  - Comprehensive test suite
  - 9 test functions with multiple sub-tests
  - Concurrent access testing
  
- `internal/typescript-estree/version/README.md` (283 lines)
  - Complete package documentation
  - Usage examples
  - API reference

### Modified Files
- `internal/typescript-estree/README.md`
  - Updated project structure
  - Added version package description
  
- `internal/typescript-estree/go.mod`
  - Added `github.com/Masterminds/semver/v3 v3.3.1`
  
- `internal/typescript-estree/go.sum`
  - Updated with semver checksums

## Dependencies

Added **Masterminds/semver v3.3.1** for semantic versioning:
- Industry-standard Go semver library
- Full semver 2.0.0 compliance
- Constraint checking support
- Pre-release version support

## Integration Path

This version checking system will be integrated into the parser in
future PRs:

1. **Parser Initialization**: Call `SetTypeScriptVersion()` with
detected TS version
2. **Feature Detection**: Use `IsVersionAtLeast()` for conditional
parsing logic
3. **Error Reporting**: Surface version warnings to users
4. **Testing**: Verify behavior across supported TypeScript versions

## Related Work

- **Follows**: PR #3 (TypeScript ESTree infrastructure setup)
- **Precedes**: Parser implementation (will use version flags)
- **Implements**: Version checking from
typescript-eslint/typescript-estree

## References

- [Original
version-check.ts](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-estree/src/version-check.ts)
- [TypeScript Release
Notes](https://www.typescriptlang.org/docs/handbook/release-notes/overview.html)
- [Semantic Versioning 2.0.0](https://semver.org/)
- [Masterminds/semver](https://github.com/Masterminds/semver)

## Test Plan

- [x] All tests pass: `go test ./internal/typescript-estree/version/...`
- [x] Module builds successfully
- [x] Dependencies resolve correctly
- [x] Documentation is complete and accurate
- [x] Version comparison logic matches original TypeScript
implementation
- [x] Thread safety verified with concurrent test
- [x] Warning system functions correctly

## Next Steps

After this PR is merged:
1. Integrate version checking into parser initialization
2. Add version-specific parsing features
3. Create compatibility test suite across TS versions
4. Update parser to use version flags

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
… Go (#5)

## Summary

This PR implements the complete type system for ESTree nodes in Go,
porting all base ESTree node types and TypeScript-specific extensions
(TSESTree types) from typescript-estree. **This builds upon the
infrastructure established in #3.**

## Changes

### New Type Files

- ✅ **positions.go** - Position, SourceLocation, Range types for source
location tracking
- ✅ **base.go** - Core Node interface, BaseNode implementation, and
fundamental types
- ✅ **expressions.go** - All expression node types (40+ types including
ES5-ES2022)
- ✅ **statements.go** - All statement and declaration types (30+ types)
- ✅ **patterns.go** - Destructuring pattern types for ES2015+
- ✅ **typescript.go** - Complete TypeScript-specific node types (60+
types)
- ✅ **tokens.go** - Token types, keywords, and punctuators
- ✅ **README.md** - Comprehensive documentation for the type system

### Updated Files

- ✅ **types_test.go** - Comprehensive unit tests covering:
  - Node interface implementation
  - JSON serialization/deserialization
- All major node types (base, expressions, statements, patterns,
TypeScript)
  - Token and comment types

### Removed Files

- ❌ **types.go** - Replaced by the modular file structure

### Other Changes

- 🔧 **go.work** - Removed non-existent typescript-go reference

## Type Coverage

### Base ESTree (ES5-ES2022)

✅ All expression types (literals, operators, functions, classes, etc.)  
✅ All statement types (control flow, loops, declarations, modules, etc.)
✅ All pattern types (destructuring for ES2015+)  
✅ Position and location types  
✅ Token and comment types

### TypeScript Extensions (TSESTree)

✅ All type annotation types (primitives, complex types, etc.)  
✅ All TypeScript declarations (interface, type alias, enum, module)  
✅ All TypeScript expressions (as, satisfies, non-null assertion)  
✅ Type parameters and instantiation  
✅ Advanced types (conditional, mapped, indexed access, etc.)

## Technical Implementation

- All types implement the `Node` interface
- Marker interfaces for categorization (Statement, Expression,
Declaration, Pattern, TSType)
- Go struct embedding for type hierarchies
- JSON struct tags for ESTree-compliant serialization
- Comprehensive documentation comments for each type
- Zero external dependencies beyond Go standard library

## File Organization

The types are logically organized into separate files for
maintainability:

```
internal/typescript-estree/types/
├── positions.go      # Source location types
├── base.go           # Core interfaces and base types
├── expressions.go    # Expression node types
├── statements.go     # Statement and declaration types
├── patterns.go       # Destructuring patterns
├── typescript.go     # TypeScript-specific types
├── tokens.go         # Token and keyword definitions
├── README.md         # Package documentation
└── types_test.go     # Comprehensive tests
```

## Testing

All tests pass successfully:

```bash
$ go test ./internal/typescript-estree/types/...
ok  	github.com/web-infra-dev/rslint/internal/typescript-estree/types	0.003s
```

Tests cover:
- ✅ Node interface implementation
- ✅ JSON serialization/deserialization
- ✅ Base node types (Program, Identifier, etc.)
- ✅ Expression types (BinaryExpression, CallExpression, etc.)
- ✅ Statement types (FunctionDeclaration, VariableDeclaration, etc.)
- ✅ Pattern types (ArrayPattern, ObjectPattern, etc.)
- ✅ TypeScript types (TSInterfaceDeclaration, TSTypeAnnotation, etc.)
- ✅ Token and comment types

## Examples

### Creating Expression Nodes

```go
// Binary expression: x + 42
left := &types.Identifier{
    BaseNode: types.BaseNode{NodeType: "Identifier"},
    Name:     "x",
}

right := &types.SimpleLiteral{
    BaseNode: types.BaseNode{NodeType: "Literal"},
    Value:    float64(42),
    Raw:      "42",
}

binExpr := &types.BinaryExpression{
    BaseNode: types.BaseNode{NodeType: "BinaryExpression"},
    Operator: "+",
    Left:     left,
    Right:    right,
}
```

### TypeScript Interface Declaration

```go
iface := &types.TSInterfaceDeclaration{
    BaseNode: types.BaseNode{NodeType: "TSInterfaceDeclaration"},
    ID: &types.Identifier{
        BaseNode: types.BaseNode{NodeType: "Identifier"},
        Name:     "MyInterface",
    },
    Body: &types.TSInterfaceBody{
        BaseNode: types.BaseNode{NodeType: "TSInterfaceBody"},
        Body:     []types.Node{},
    },
}
```

## Documentation

Each type includes comprehensive documentation comments explaining:
- What the node represents
- Which ECMAScript/TypeScript version introduced it
- Example usage where appropriate
- Field descriptions

See the [types README](internal/typescript-estree/types/README.md) for
complete documentation.

## References

- [ESTree Specification](https://github.com/estree/estree)
-
[TypeScript-ESTree](https://github.com/typescript-eslint/typescript-eslint/tree/main/packages/typescript-estree)
- [TypeScript-ESTree AST
Spec](https://typescript-eslint.io/packages/typescript-estree/ast-spec/)
- [@types/estree](https://www.npmjs.com/package/@types/estree)

## Related

- Builds upon #3 (TypeScript ESTree infrastructure setup)
- Part of the TypeScript ESTree porting effort for rslint

## Next Steps

After this PR is merged, the next steps will be:
1. Implement the parser logic to generate these AST nodes
2. Implement the converter to transform TypeScript AST to ESTree format
3. Add comprehensive integration tests

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions bot force-pushed the auto/update-rule-manifest branch from c471b7a to 95ba33a Compare October 19, 2025 23:13
@github-actions github-actions bot force-pushed the auto/update-rule-manifest branch from 95ba33a to 5a09660 Compare October 19, 2025 23:14
@kdy1 kdy1 closed this Oct 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants