chore: add integrate Stylelint for CSS linting (#3909)

# Description of Changes

**What was changed**  
- Added a new `.stylelintrc.json` to configure Stylelint with
`stylelint-config-standard` and custom ignore rules.
- Created a `lint:css` script in `package.json` and added
`stylelint`/`stylelint-config-standard` to `devDependencies`.
  - Added `package-lock.json` to lock dependencies.  
- Updated numerous CSS files under
`stirling-pdf/src/main/resources/static/css/` to fix lint errors
(shorthand properties, removed redundant units, consistent box-shadow
syntax, margin shorthand, etc.).

**Why the change was made**  
- To enforce consistent, modern CSS code style across the project, catch
errors early, and enable automated fixing of common lint issues.


---

## Checklist

### General

- [x] I have read the [Contribution
Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md)
- [x] I have read the [Stirling-PDF Developer
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md)
(if applicable)
- [ ] I have read the [How to add new languages to
Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md)
(if applicable)
- [x] I have performed a self-review of my own code
- [x] My changes generate no new warnings

### Documentation

- [ ] I have updated relevant docs on [Stirling-PDF's doc
repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/)
(if functionality has heavily changed)
- [ ] I have read the section [Add New Translation
Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags)
(for new translation tags only)

### UI Changes (if applicable)

- [ ] Screenshots or videos demonstrating the UI changes are attached
(e.g., as comments or direct attachments in the PR)

### Testing (if applicable)

- [ ] I have tested my changes locally. Refer to the [Testing
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md#6-testing)
for more details.
This commit is contained in:
Ludy 2025-07-14 13:37:03 +02:00 committed by GitHub
parent 8ba7cfe921
commit 626734c781
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 1740 additions and 1 deletions

View File

@ -119,7 +119,9 @@
"EditorConfig.EditorConfig", // EditorConfig support for maintaining consistent coding styles
"ms-azuretools.vscode-docker", // Docker extension for Visual Studio Code
"charliermarsh.ruff", // Ruff extension for Ruff language support
"github.vscode-github-actions" // GitHub Actions extension for Visual Studio Code
"github.vscode-github-actions", // GitHub Actions extension for Visual Studio Code
"stylelint.vscode-stylelint", // Stylelint extension for CSS and SCSS linting
"redhat.vscode-yaml" // YAML extension for Visual Studio Code
]
}
},

View File

@ -126,6 +126,7 @@ labels:
- '.pre-commit-config'
- '.github/workflows/pre_commit.yml'
- 'devGuide/.*'
- 'devTools/.*'
- label: 'Test'
files:

View File

@ -17,5 +17,7 @@
"GitHub.vscode-pull-request-github", // GitHub Pull Requests extension for Visual Studio Code
"charliermarsh.ruff", // Ruff code formatter for Python to follow the Ruff Style Guide
"yzhang.markdown-all-in-one", // Markdown All-in-One extension for enhanced Markdown editing
"stylelint.vscode-stylelint", // Stylelint extension for CSS and SCSS linting
"redhat.vscode-yaml", // YAML extension for Visual Studio Code
]
}

View File

@ -9,6 +9,9 @@
"[jsonc]": {
"editor.defaultFormatter": "vscode.json-language-features"
},
"[css]": {
"editor.defaultFormatter": "stylelint.vscode-stylelint"
},
"[json]": {
"editor.defaultFormatter": "vscode.json-language-features"
},
@ -27,6 +30,9 @@
"[gradle]": {
"editor.defaultFormatter": "vscjava.vscode-gradle"
},
"[yaml]": {
"editor.defaultFormatter": "redhat.vscode-yaml"
},
"java.compile.nullAnalysis.mode": "automatic",
"java.configuration.updateBuildConfiguration": "interactive",
"java.format.enabled": true,
@ -119,6 +125,7 @@
"html.format.indentHandlebars": true,
"html.format.preserveNewLines": true,
"html.format.maxPreserveNewLines": 2,
"stylelint.configFile": "devTools/.stylelintrc.json",
"java.project.sourcePaths": [
"stirling-pdf/src/main/java",
"common/src/main/java",

47
devGuide/STYLELINT.md Normal file
View File

@ -0,0 +1,47 @@
# STYLELINT.md
## Usage
Apply Stylelint to your project's CSS with the following steps:
1. **NPM Script**
- Go to directory: `devTools/`
- Add Stylelint & stylistic/stylelint-plugin
```bash
npm install --save-dev stylelint stylelint-config-standard
npm install --save-dev @stylistic/stylelint-plugin
```
- Add a script entry to your `package.json`:
```jsonc
{
"scripts": {
"lint:css:check": "stylelint \"../stirling-pdf/src/main/**/*.css\" \"../proprietary/src/main/resources/static/css/*.css\" --config .stylelintrc.json",
"lint:css:fix": "stylelint \"../stirling-pdf/src/main/**/*.css\" \"../proprietary/src/main/resources/static/css/*.css\" --config .stylelintrc.json --fix"
}
}
```
- Run the linter:
```bash
npm run lint:css:check
npm run lint:css:fix
```
2. **CLI Usage**
- Lint all CSS files:
```bash
npx stylelint ../stirling-pdf/src/main/**/*.css ../proprietary/src/main/resources/static/css/*.css
```
- Lint a single file:
```bash
npx stylelint ../proprietary/src/main/resources/static/css/audit-dashboard.css
```
- Apply automatic fixes:
```bash
npx stylelint "../stirling-pdf/src/main/**/*.css" "../proprietary/src/main/resources/static/css/*.css" --fix
```
For full configuration options and rule customization, refer to the official documentation: [https://stylelint.io](https://stylelint.io)

View File

@ -0,0 +1,69 @@
{
"extends": [
"stylelint-config-standard"
],
"plugins": [
"@stylistic/stylelint-plugin"
],
"ignoreFiles": [
"stirling-pdf/src/main/resources/static/css/bootstrap*.css",
"stirling-pdf/src/main/resources/static/css/cookieconsent.css",
"stirling-pdf/src/main/resources/static/css/cookieconsentCustomisation.css",
"stirling-pdf/src/main/resources/static/css/prism.css",
"stirling-pdf/src/main/resources/static/pdfjs-legacy/**/*.css"
],
"rules": {
"property-no-vendor-prefix": null,
"value-no-vendor-prefix": null,
"selector-no-vendor-prefix": null,
"media-feature-name-no-vendor-prefix": null,
"value-keyword-case": null,
"color-function-notation": null,
"alpha-value-notation": null,
"color-function-alias-notation": null,
"selector-class-pattern": null,
"selector-id-pattern": null,
"declaration-block-no-redundant-longhand-properties": null,
"media-feature-range-notation": "prefix",
"selector-attribute-quotes": null,
"at-rule-no-vendor-prefix": null,
"selector-not-notation": null,
"no-duplicate-selectors": [
true,
{
"disableFix": true
}
],
"comment-word-disallowed-list": null,
"custom-property-pattern": null,
"no-descending-specificity": null,
"keyframes-name-pattern": null,
"comment-empty-line-before": [
"always",
{
"ignore": [
"stylelint-commands"
]
}
],
"block-no-empty": true,
"@stylistic/declaration-bang-space-after": "never",
"@stylistic/declaration-bang-space-before": "always",
"@stylistic/declaration-block-trailing-semicolon": "always",
"@stylistic/function-comma-space-after": [
"always-single-line",
{
"disableFix": false
}
],
"@stylistic/function-comma-space-before": "never",
"@stylistic/color-hex-case": "lower",
"@stylistic/declaration-block-semicolon-newline-after": "always",
"@stylistic/indentation": [
2,
{
"baseIndentLevel": 2
}
]
}
}

1598
devTools/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

13
devTools/package.json Normal file
View File

@ -0,0 +1,13 @@
{
"name": "stirling-pdf",
"version": "1.0.0",
"scripts": {
"lint:css:check": "stylelint \"../stirling-pdf/src/main/**/*.css\" \"../proprietary/src/main/resources/static/css/*.css\" --config .stylelintrc.json",
"lint:css:fix": "stylelint \"../stirling-pdf/src/main/**/*.css\" \"../proprietary/src/main/resources/static/css/*.css\" --config .stylelintrc.json --fix"
},
"devDependencies": {
"@stylistic/stylelint-plugin": "^3.1.3",
"stylelint": "^16.21.1",
"stylelint-config-standard": "^38.0.0"
}
}