Initial commit
This commit is contained in:
626
references/contributing.md
Normal file
626
references/contributing.md
Normal file
@@ -0,0 +1,626 @@
|
||||
# UI5 Linter - Contributing Guide
|
||||
|
||||
**Source**: [https://github.com/UI5/linter/blob/main/CONTRIBUTING.md](https://github.com/UI5/linter/blob/main/CONTRIBUTING.md)
|
||||
**Last Updated**: 2025-11-21
|
||||
**UI5 Linter Version**: 1.20.5
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
This guide covers how to contribute to the UI5 Linter project, including reporting issues, requesting features, and submitting code changes. Following these guidelines ensures your contributions are processed efficiently.
|
||||
|
||||
---
|
||||
|
||||
## Before You Contribute
|
||||
|
||||
### Check Existing Work
|
||||
|
||||
**Search First**:
|
||||
```bash
|
||||
# Check if issue already exists
|
||||
[https://github.com/UI5/linter/issues](https://github.com/UI5/linter/issues)
|
||||
|
||||
# Check the Task Board for related work
|
||||
[https://github.com/orgs/SAP/projects/110](https://github.com/orgs/SAP/projects/110)
|
||||
```
|
||||
|
||||
**Why**: Avoid duplicate reports and identify ongoing work that might address your needs.
|
||||
|
||||
---
|
||||
|
||||
## Reporting Issues
|
||||
|
||||
### When to Report Issues
|
||||
|
||||
**✅ Report Issues For**:
|
||||
- Bugs in UI5 Linter functionality
|
||||
- Problems with linting rules
|
||||
- Autofix errors or unexpected behavior
|
||||
- Documentation errors or gaps
|
||||
- Feature requests for new rules or capabilities
|
||||
|
||||
**❌ DO NOT Report Issues For**:
|
||||
- Problems with UI5 Linter dependencies (report to those projects)
|
||||
- Issues with non-public UI5 APIs
|
||||
- General UI5 questions (use community channels instead)
|
||||
- Security vulnerabilities (follow security policy instead)
|
||||
|
||||
---
|
||||
|
||||
### Issue Reporting Standards
|
||||
|
||||
**Essential Requirements for Bug Reports**:
|
||||
|
||||
1. **Good Summary**
|
||||
- Be specific to the issue
|
||||
- Include what failed, not just "linter doesn't work"
|
||||
|
||||
**Example**:
|
||||
```
|
||||
✅ Good: "no-globals rule fails to detect sap.ui.getCore() in arrow functions"
|
||||
❌ Bad: "Linter broken"
|
||||
```
|
||||
|
||||
2. **Reproducible Bug**
|
||||
- Provide step-by-step instructions
|
||||
- Include minimal code example
|
||||
- Specify exact commands run
|
||||
|
||||
**Example**:
|
||||
```markdown
|
||||
## Steps to Reproduce
|
||||
1. Create file `test.js` with content:
|
||||
```javascript
|
||||
const fn = () => sap.ui.getCore().byId("test");
|
||||
```
|
||||
2. Run: `ui5lint test.js`
|
||||
3. Expected: Warning about global usage
|
||||
4. Actual: No warning shown
|
||||
```
|
||||
|
||||
3. **Environment Details**
|
||||
- UI5 Linter version: `ui5lint --version`
|
||||
- Node.js version: `node --version`
|
||||
- npm version: `npm --version`
|
||||
- Operating system: Windows 11, macOS 14, Ubuntu 22.04, etc.
|
||||
- UI5 version in your project
|
||||
|
||||
4. **Expected vs Actual Behavior**
|
||||
- What you expected to happen
|
||||
- What actually happened
|
||||
- Include error messages (full stack trace if applicable)
|
||||
|
||||
5. **Maximum Context**
|
||||
- Configuration file (ui5lint.config.js)
|
||||
- Relevant code snippets
|
||||
- Log output with `--verbose` flag
|
||||
|
||||
**Example**:
|
||||
```bash
|
||||
ui5lint --verbose test.js 2>&1 | tee debug.log
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Bug Report Template
|
||||
|
||||
Use the GitHub issue template or follow this format:
|
||||
|
||||
```markdown
|
||||
## Bug Description
|
||||
Brief description of the issue
|
||||
|
||||
## Steps to Reproduce
|
||||
1. Step one
|
||||
2. Step two
|
||||
3. Step three
|
||||
|
||||
## Expected Behavior
|
||||
What should happen
|
||||
|
||||
## Actual Behavior
|
||||
What actually happens
|
||||
|
||||
## Environment
|
||||
- UI5 Linter version: 1.20.5
|
||||
- Node.js version: 20.11.0
|
||||
- npm version: 10.2.0
|
||||
- OS: Ubuntu 22.04
|
||||
- UI5 version: 1.120.0
|
||||
|
||||
## Configuration
|
||||
```javascript
|
||||
// ui5lint.config.mjs
|
||||
export default {
|
||||
ignores: ["webapp/thirdparty/**"]
|
||||
};
|
||||
```
|
||||
|
||||
## Additional Context
|
||||
- Verbose output attached
|
||||
- Related to issue #123
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Issue Reporting Rules
|
||||
|
||||
**Critical Rules**:
|
||||
- ✅ **One bug per report** - Open separate issues for different problems
|
||||
- ✅ **English only** - All issues must be in English
|
||||
- ✅ **Use template** - Follow the provided issue template
|
||||
- ✅ **Search first** - Check for duplicates before reporting
|
||||
- ❌ **No sensitive data** - Don't include credentials, tokens, or proprietary code
|
||||
|
||||
---
|
||||
|
||||
## Security Issues
|
||||
|
||||
**🔒 DO NOT create public GitHub issues for security vulnerabilities**
|
||||
|
||||
Instead:
|
||||
1. Review the [Security Policy](https://github.com/UI5/linter/security/policy)
|
||||
2. Report vulnerabilities through GitHub's private security advisory feature
|
||||
3. Follow responsible disclosure practices
|
||||
|
||||
**Why**: Public disclosure puts users at risk before a fix is available.
|
||||
|
||||
---
|
||||
|
||||
## Feature Requests
|
||||
|
||||
### When to Request Features
|
||||
|
||||
**Good Feature Requests**:
|
||||
- New linting rules for UI5 2.x compatibility
|
||||
- Additional autofix capabilities
|
||||
- New output formats
|
||||
- Performance improvements
|
||||
- Developer experience enhancements
|
||||
|
||||
**How to Request**:
|
||||
1. Check [Task Board](https://github.com/orgs/SAP/projects/110) for existing work
|
||||
2. Search [issues](https://github.com/UI5/linter/issues) for similar requests
|
||||
3. Open issue with `Feature` label
|
||||
4. Describe use case and expected behavior
|
||||
5. Explain why this would benefit other users
|
||||
|
||||
**Feature Request Template**:
|
||||
```markdown
|
||||
## Feature Description
|
||||
Clear description of the proposed feature
|
||||
|
||||
## Use Case
|
||||
Why is this feature needed? What problem does it solve?
|
||||
|
||||
## Proposed Solution
|
||||
How should this feature work?
|
||||
|
||||
## Alternatives Considered
|
||||
What other approaches did you consider?
|
||||
|
||||
## Additional Context
|
||||
- Screenshots, mockups, examples
|
||||
- Related issues or RFCs
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Issue Labels
|
||||
|
||||
Understanding issue labels helps track and prioritize issues.
|
||||
|
||||
### Type Labels
|
||||
|
||||
| Label | Description |
|
||||
|-------|-------------|
|
||||
| **Bug** | Something isn't working correctly |
|
||||
| **Feature** | New feature or enhancement request |
|
||||
|
||||
### UI5 Linter-Specific Labels
|
||||
|
||||
| Label | Description |
|
||||
|-------|-------------|
|
||||
| **detection** | Related to rule detection logic |
|
||||
| **autofix** | Related to automatic fixing |
|
||||
| **documentation** | Documentation improvements |
|
||||
| **needs triage** | Issue needs review by maintainers |
|
||||
|
||||
### Status Labels (Open Issues)
|
||||
|
||||
| Label | Description |
|
||||
|-------|-------------|
|
||||
| **information required** | More details needed from reporter |
|
||||
| **good first issue** | Suitable for new contributors |
|
||||
| **help wanted** | Community contributions welcome |
|
||||
|
||||
### Status Labels (Closed Issues)
|
||||
|
||||
| Label | Description |
|
||||
|-------|-------------|
|
||||
| **duplicate** | Already reported elsewhere |
|
||||
| **invalid** | Not a valid issue |
|
||||
| **wontfix** | Won't be fixed/implemented |
|
||||
|
||||
---
|
||||
|
||||
## Code Contributions
|
||||
|
||||
### Contribution Process
|
||||
|
||||
**Step-by-Step Workflow**:
|
||||
|
||||
1. **Confirm Change is Welcome**
|
||||
```bash
|
||||
# Check Task Board for related work
|
||||
[https://github.com/orgs/SAP/projects/110](https://github.com/orgs/SAP/projects/110)
|
||||
|
||||
# Comment on related issue or create discussion
|
||||
```
|
||||
|
||||
2. **Fork the Repository**
|
||||
```bash
|
||||
# Fork via GitHub UI, then clone
|
||||
git clone [https://github.com/YOUR-USERNAME/linter.git](https://github.com/YOUR-USERNAME/linter.git)
|
||||
cd linter
|
||||
```
|
||||
|
||||
3. **Create Branch**
|
||||
```bash
|
||||
# Use descriptive branch name
|
||||
git checkout -b fix/no-globals-arrow-functions
|
||||
# or
|
||||
git checkout -b feat/new-rule-name
|
||||
```
|
||||
|
||||
4. **Make Changes**
|
||||
```bash
|
||||
# Follow development conventions
|
||||
# See docs/Guidelines.md and docs/Development.md
|
||||
|
||||
# Run tests
|
||||
npm test
|
||||
|
||||
# Run linter
|
||||
npm run lint
|
||||
```
|
||||
|
||||
5. **Commit Changes**
|
||||
```bash
|
||||
# Follow Conventional Commits format
|
||||
git commit -m "fix(no-globals): Detect globals in arrow functions
|
||||
|
||||
- Add support for arrow function expressions
|
||||
- Update test fixtures
|
||||
- Add regression test for issue #123"
|
||||
```
|
||||
|
||||
6. **Push Branch**
|
||||
```bash
|
||||
git push origin fix/no-globals-arrow-functions
|
||||
```
|
||||
|
||||
7. **Create Pull Request**
|
||||
- Use GitHub UI to create PR
|
||||
- Fill out PR template
|
||||
- Link related issues
|
||||
- Provide clear description
|
||||
|
||||
8. **Accept DCO**
|
||||
- CLA Assistant will prompt for Developer Certificate of Origin
|
||||
- Required for first-time contributors
|
||||
- Accept to proceed with PR
|
||||
|
||||
9. **Address Review Feedback**
|
||||
```bash
|
||||
# Make requested changes
|
||||
git add .
|
||||
git commit -m "fix: Address review feedback"
|
||||
git push
|
||||
```
|
||||
|
||||
10. **Merge**
|
||||
- Maintainers will merge approved PRs
|
||||
- Squash merge is typically used
|
||||
- Credit will be given in commit and release notes
|
||||
|
||||
---
|
||||
|
||||
### Development Conventions
|
||||
|
||||
**See Full Guides**:
|
||||
- **Guidelines.md** - Coding standards, testing, git workflow
|
||||
- **Development.md** - Setup, SAPUI5 types, autofix development
|
||||
|
||||
**Key Standards**:
|
||||
|
||||
**Code Style**:
|
||||
```bash
|
||||
# ESLint enforced
|
||||
npm run lint
|
||||
|
||||
# Fix auto-fixable issues
|
||||
npm run lint -- --fix
|
||||
```
|
||||
|
||||
**Testing**:
|
||||
```bash
|
||||
# Run all tests (CI-style)
|
||||
npm test
|
||||
|
||||
# Run unit tests once
|
||||
npm run unit
|
||||
|
||||
# Run unit tests in watch mode
|
||||
npm run unit-watch
|
||||
```
|
||||
|
||||
**Git Workflow**:
|
||||
```bash
|
||||
# Use rebase, NOT merge
|
||||
git fetch origin
|
||||
git rebase origin/main
|
||||
|
||||
# NO merge commits
|
||||
# Maintainers will squash on merge
|
||||
```
|
||||
|
||||
**Commit Message Format**:
|
||||
```
|
||||
type(scope): Description
|
||||
|
||||
- Bullet point details
|
||||
- Another detail
|
||||
|
||||
Fixes #123
|
||||
```
|
||||
|
||||
**Types**: fix, feat, docs, style, refactor, test, chore
|
||||
|
||||
**Scope**: Rule name, component, or area affected
|
||||
|
||||
**Example**:
|
||||
```
|
||||
fix(xml-transpiler): Log unknown namespaces as verbose instead of warning
|
||||
|
||||
- Changes log level for unknown XML namespaces
|
||||
- Reduces noise in common scenarios
|
||||
- Aligns with UI5 best practices
|
||||
|
||||
Fixes #456
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Developer Certificate of Origin (DCO)
|
||||
|
||||
**What is DCO?**
|
||||
|
||||
The Developer Certificate of Origin is a lightweight alternative to traditional CLAs (Contributor License Agreements). It certifies that you have the right to submit your contribution.
|
||||
|
||||
**How to Accept**:
|
||||
1. First PR triggers CLA Assistant
|
||||
2. Click link and accept DCO terms
|
||||
3. Terms follow [developercertificate.org](https://developercertificate.org/)
|
||||
4. One-time acceptance covers all future PRs
|
||||
|
||||
**DCO Statement**:
|
||||
> By submitting this pull request, I certify that my contribution is made under the terms of the Developer Certificate of Origin.
|
||||
|
||||
---
|
||||
|
||||
### AI-Generated Code
|
||||
|
||||
**Guidelines for AI-Assisted Contributions**:
|
||||
|
||||
If your contribution includes AI-generated code:
|
||||
1. Follow SAP's [AI Code Contribution Guidelines](https://github.com/SAP/.github/blob/main/CONTRIBUTING_USING_GENAI.md)
|
||||
2. Review and understand all AI-generated code
|
||||
3. Ensure code meets project standards
|
||||
4. Test thoroughly
|
||||
5. Disclose AI assistance in PR description (optional but recommended)
|
||||
|
||||
**Important**:
|
||||
- You are responsible for all submitted code, regardless of origin
|
||||
- AI-generated code must pass all quality checks
|
||||
- Maintainers may request clarification or changes
|
||||
|
||||
---
|
||||
|
||||
## RFC Process (Request for Comments)
|
||||
|
||||
**When to Write an RFC**:
|
||||
- Major new features
|
||||
- Breaking changes
|
||||
- Architectural decisions
|
||||
- Significant API changes
|
||||
|
||||
**RFC Template**:
|
||||
[https://github.com/UI5/linter/blob/main/rfcs/0000-template.md](https://github.com/UI5/linter/blob/main/rfcs/0000-template.md)
|
||||
|
||||
**Process**:
|
||||
1. Copy template to `rfcs/NNNN-my-feature.md`
|
||||
2. Fill out all sections
|
||||
3. Create PR with RFC
|
||||
4. Discuss in PR comments
|
||||
5. Iterate based on feedback
|
||||
6. Final decision by maintainers
|
||||
|
||||
**Note**: Currently no active RFCs, but process is available for major proposals.
|
||||
|
||||
---
|
||||
|
||||
## Contribution Best Practices
|
||||
|
||||
### Before Submitting PR
|
||||
|
||||
**✅ Checklist**:
|
||||
- [ ] Tests pass: `npm test`
|
||||
- [ ] Linter passes: `npm run lint`
|
||||
- [ ] Code follows guidelines
|
||||
- [ ] Commit messages follow conventions
|
||||
- [ ] Branch rebased on latest main
|
||||
- [ ] No merge commits
|
||||
- [ ] Related issue referenced
|
||||
- [ ] PR template completed
|
||||
|
||||
### During Review
|
||||
|
||||
**✅ Good Practices**:
|
||||
- Respond to feedback promptly
|
||||
- Ask questions if review unclear
|
||||
- Make requested changes quickly
|
||||
- Be open to suggestions
|
||||
- Keep discussion professional
|
||||
|
||||
**❌ Avoid**:
|
||||
- Force pushing after review (unless requested)
|
||||
- Adding unrelated changes
|
||||
- Arguing without technical justification
|
||||
- Ignoring review feedback
|
||||
|
||||
### After Merge
|
||||
|
||||
**✅ Follow Up**:
|
||||
- Monitor for issues related to your change
|
||||
- Be available to fix regressions
|
||||
- Update documentation if needed
|
||||
- Close related issues
|
||||
|
||||
---
|
||||
|
||||
## Common Contribution Scenarios
|
||||
|
||||
### Scenario 1: Fix a Bug
|
||||
|
||||
```bash
|
||||
# 1. Find and confirm bug
|
||||
ui5lint test.js --verbose
|
||||
|
||||
# 2. Create issue if not exists
|
||||
# GitHub issue #789
|
||||
|
||||
# 3. Fork and branch
|
||||
git clone [https://github.com/YOUR-USERNAME/linter.git](https://github.com/YOUR-USERNAME/linter.git)
|
||||
git checkout -b fix/issue-789
|
||||
|
||||
# 4. Write failing test
|
||||
# test/lib/rules/no-globals.js
|
||||
|
||||
# 5. Fix the bug
|
||||
# src/linter/rules/no-globals.js
|
||||
|
||||
# 6. Verify test passes
|
||||
npm run unit
|
||||
|
||||
# 7. Commit
|
||||
git commit -m "fix(no-globals): Detect globals in arrow functions
|
||||
|
||||
- Add support for ArrowFunctionExpression
|
||||
- Add test case for issue #789
|
||||
- Update documentation
|
||||
|
||||
Fixes #789"
|
||||
|
||||
# 8. Push and create PR
|
||||
git push origin fix/issue-789
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Scenario 2: Add New Rule
|
||||
|
||||
```bash
|
||||
# 1. Create RFC or discussion first (for major rules)
|
||||
# 2. Get approval from maintainers
|
||||
|
||||
# 3. Fork and branch
|
||||
git checkout -b feat/new-rule-name
|
||||
|
||||
# 4. Implement rule
|
||||
# src/linter/rules/new-rule-name.js
|
||||
|
||||
# 5. Add tests
|
||||
# test/lib/rules/new-rule-name.js
|
||||
|
||||
# 6. Add documentation
|
||||
# Update docs/Rules.md
|
||||
|
||||
# 7. Run full test suite
|
||||
npm test
|
||||
|
||||
# 8. Commit
|
||||
git commit -m "feat(rules): Add new-rule-name for detecting X
|
||||
|
||||
- Implements new rule to detect Y
|
||||
- Adds comprehensive test coverage
|
||||
- Documents rule in Rules.md
|
||||
|
||||
Implements #456"
|
||||
|
||||
# 9. Push and create PR
|
||||
git push origin feat/new-rule-name
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Scenario 3: Improve Documentation
|
||||
|
||||
```bash
|
||||
# 1. Identify documentation gap
|
||||
# 2. Fork and branch
|
||||
git checkout -b docs/improve-autofix-guide
|
||||
|
||||
# 3. Update documentation
|
||||
# docs/Scope-of-Autofix.md
|
||||
|
||||
# 4. Commit
|
||||
git commit -m "docs(autofix): Clarify limitations for Core APIs
|
||||
|
||||
- Add examples of unsupported APIs
|
||||
- Link to GitHub issues #619, #620
|
||||
- Improve troubleshooting section"
|
||||
|
||||
# 5. Push and create PR
|
||||
git push origin docs/improve-autofix-guide
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Resources for Contributors
|
||||
|
||||
**Official Documentation**:
|
||||
- [Development Guide](https://github.com/UI5/linter/blob/main/docs/Development.md)
|
||||
- [Guidelines](https://github.com/UI5/linter/blob/main/docs/Guidelines.md)
|
||||
- [Rules Documentation](https://github.com/UI5/linter/blob/main/docs/Rules.md)
|
||||
|
||||
**GitHub Resources**:
|
||||
- [Task Board](https://github.com/orgs/SAP/projects/110)
|
||||
- [Issues](https://github.com/UI5/linter/issues)
|
||||
- [Pull Requests](https://github.com/UI5/linter/pulls)
|
||||
- [Security Policy](https://github.com/UI5/linter/security/policy)
|
||||
|
||||
**Community**:
|
||||
- [OpenUI5 Slack](https://ui5-slack-invite.cfapps.eu10.hana.ondemand.com) - #tooling channel
|
||||
- [StackOverflow](http://stackoverflow.com/questions/tagged/ui5-tooling) - ui5-tooling tag
|
||||
|
||||
---
|
||||
|
||||
## Summary
|
||||
|
||||
**Quick Reference**:
|
||||
|
||||
**Report Bug**: Search → Create issue → Follow template → Provide context
|
||||
|
||||
**Request Feature**: Search → Create issue → Describe use case → Explain benefit
|
||||
|
||||
**Contribute Code**: Confirm welcome → Fork → Branch → Commit → PR → Review → Merge
|
||||
|
||||
**Get Help**: Use community channels (Slack, StackOverflow), not GitHub issues
|
||||
|
||||
---
|
||||
|
||||
**Document Version**: 1.0
|
||||
**Last Verified**: 2025-11-21
|
||||
**Next Review**: 2026-02-21
|
||||
Reference in New Issue
Block a user