--- description: Apache Superset development standards and guidelines for Cursor IDE globs: ["**/*.py", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.sql", "**/*.md"] alwaysApply: true --- # Apache Superset Development Standards for Cursor IDE Apache Superset is a data visualization platform with Flask/Python backend and React/TypeScript frontend. ## ⚠️ CRITICAL: Ongoing Refactors (What NOT to Do) **These migrations are actively happening - avoid deprecated patterns:** ### Frontend Modernization - **NO `any` types** - Use proper TypeScript types - **NO JavaScript files** - Convert to TypeScript (.ts/.tsx) - **NO Enzyme** - Use React Testing Library/Jest (Enzyme fully removed) - **Use @superset-ui/core** - Don't import Ant Design directly ### Testing Strategy Migration - **Prefer unit tests** over integration tests - **Prefer integration tests** over Cypress end-to-end tests - **Cypress is last resort** - Actively moving away from Cypress - **Use Jest + React Testing Library** for component testing ### Backend Type Safety - **Add type hints** - All new Python code needs proper typing - **MyPy compliance** - Run `pre-commit run mypy` to validate - **SQLAlchemy typing** - Use proper model annotations ## Code Standards ### TypeScript Frontend - **NO `any` types** - Use proper TypeScript - **Functional components** with hooks - **@superset-ui/core** for UI components (not direct antd) - **Jest** for testing (NO Enzyme) - **Redux** for global state, hooks for local ### Python Backend - **Type hints required** for all new code - **MyPy compliant** - run `pre-commit run mypy` - **SQLAlchemy models** with proper typing - **pytest** for testing ### Apache License Headers - **New files require ASF license headers** - When creating new code files, include the standard Apache Software Foundation license header - **LLM instruction files are excluded** - Files like LLMS.md, CLAUDE.md, etc. are in `.rat-excludes` to avoid header token overhead ## Key Directory Structure ``` superset/ ├── superset/ # Python backend (Flask, SQLAlchemy) │ ├── views/api/ # REST API endpoints │ ├── models/ # Database models │ └── connectors/ # Database connections ├── superset-frontend/src/ # React TypeScript frontend │ ├── components/ # Reusable components │ ├── explore/ # Chart builder │ ├── dashboard/ # Dashboard interface │ └── SqlLab/ # SQL editor ├── superset-frontend/packages/ │ └── superset-ui-core/ # UI component library (USE THIS) ├── tests/ # Python/integration tests ├── docs/ # Documentation (UPDATE FOR CHANGES) └── UPDATING.md # Breaking changes log ``` ## Architecture Patterns ### Dataset-Centric Approach Charts built from enriched datasets containing: - Dimension columns with labels/descriptions - Predefined metrics as SQL expressions - Self-service analytics within defined contexts ### Security & Features - **RBAC**: Role-based access via Flask-AppBuilder - **Feature flags**: Control feature rollouts - **Row-level security**: SQL-based data access control ## Test Utilities ### Python Test Helpers - **`SupersetTestCase`** - Base class in `tests/integration_tests/base_tests.py` - **`@with_config`** - Config mocking decorator - **`@with_feature_flags`** - Feature flag testing - **`login_as()`, `login_as_admin()`** - Authentication helpers - **`create_dashboard()`, `create_slice()`** - Data setup utilities ### TypeScript Test Helpers - **`superset-frontend/spec/helpers/testing-library.tsx`** - Custom render() with providers - **`createWrapper()`** - Redux/Router/Theme wrapper - **`selectOption()`** - Select component helper - **React Testing Library** - NO Enzyme (removed) ## Pre-commit Validation **Use pre-commit hooks for quality validation:** ```bash # Install hooks pre-commit install # Quick validation (faster than --all-files) pre-commit run # Staged files only pre-commit run mypy # Python type checking pre-commit run prettier # Code formatting pre-commit run eslint # Frontend linting ``` ## Development Guidelines - **Documentation**: Update docs/ for any user-facing changes - **Breaking Changes**: Add to UPDATING.md - **Docstrings**: Required for new functions/classes - **Follow existing patterns**: Mimic code style, use existing libraries and utilities - **Type Safety**: This codebase is actively modernizing toward full TypeScript and type safety - **Always run `pre-commit run`** to validate changes before committing --- **Note**: This codebase is actively modernizing toward full TypeScript and type safety. Always run `pre-commit run` to validate changes. Follow the ongoing refactors section to avoid deprecated patterns.