# Blinter ๐
**Blinter** is a linter for Windows batch files (`.bat` and `.cmd`). It provides comprehensive static analysis to identify syntax errors, security vulnerabilities, performance issues and style problems. Blinter helps you write safer, more reliable and maintainable batch scripts. Even in 2025, batch files deserve professional tooling! ๐ป
- โ
**Configurable Options** - Configurable rules, logging, robust error handling
- โ
**Unicode Support** - Support for international characters and filenames
- โ
**Performance Optimized** - Handles large files (10MB+) efficiently
## Features โจ
### ๐ **Rule Categories**
- **157 Built-in Rules** across 5 severity levels
- **Error Level (E001-E999)**: Critical syntax errors that prevent execution
- **Warning Level (W001-W999)**: Potential runtime issues and bad practices
- **Style Level (S001-S999)**: Code formatting and readability improvements
- **Security Level (SEC001+)**: Security vulnerabilities and dangerous operations
- **Performance Level (P001-P999)**: Optimization opportunities and efficiency improvements
๐ **For complete rule descriptions with examples and implementation details, see [Batch-File-Linter-Requirements.md](https://github.com/tboy1337/Blinter/blob/main/docs/Batch-File-Linter-Requirements.md)**
### ๐ **Output Format**
- **Rule Codes**: Each issue has a unique identifier (e.g., E002, W005, SEC003)
- **Clear Explanations**: Detailed descriptions of why each issue matters
- **Actionable Recommendations**: Specific guidance on how to fix problems
- **Line-by-Line Analysis**: Precise location of every issue
- **Context Information**: Additional details about detected problems
### ๐ **Advanced Analysis**
- **Static Code Analysis**: Detects unreachable code and logic errors
- **Advanced Variable Expansion**: Validates percent-tilde syntax (%~n1), string operations, and SET /A arithmetic
- **Command-Specific Validation**: FOR loop variations, IF statement best practices, deprecated command detection
- **Variable Tracking**: Identifies undefined variables and unsafe usage patterns
- **Security Scanning**: Path traversal attacks, command injection risks, unsafe temp file creation
- **Performance Optimization**: DIR flag optimization, unnecessary output detection, string operation efficiency
- **Cross-Platform Compatibility**: Warns about Windows version issues and deprecated commands
- **Large File Handling**: Efficiently processes files up to 10MB+ with performance warnings
- **Robust Encoding Detection**: Handles UTF-8, UTF-16, Latin-1 and 6 more encoding formats
- **Advanced Escaping Techniques**: Validates caret escape sequences, multilevel escaping, and continuation characters
- **Professional FOR Command Analysis**: Checks for usebackq, proper tokenizing, delimiters, and skip options
- **Process Management Best Practices**: Timeout command usage, process verification, and restart patterns
- **Enhanced Security Patterns**: User input validation, temporary file security, and self-modification detection
## Installation ๐ ๏ธ
### ๐ Quick Start (Recommended)
**Option 1: Install via pip**
```cmd
pip install Blinter
```
**Option 2: Download standalone executable**
- Download the latest `Blinter-v1.0.x-windows.zip` from [GitHub Releases](https://github.com/tboy1337/Blinter/releases)
### ๐ง Manual Installation
1. Clone the repository:
```cmd
git clone https://github.com/tboy1337/Blinter.git
cd Blinter
```
2. (Optional) Create a virtual environment:
```cmd
python -m venv venv
venv\Scripts\Activate.ps1
```
3. (Optional but recommended) Install dependencies:
```cmd
pip install -r requirements.txt
```
### Prerequisites
- **Python 3.9+** (required for pip installation and development)
- **Windows OS** (required for standalone executable)
## Usage ๐
### Basic Usage
**If installed via pip:**
```cmd
# Analyze a single batch file
python -m blinter script.bat
# Analyze all batch files in a directory (recursive)
python -m blinter /path/to/batch/files
# Analyze batch files in directory only (non-recursive)
python -m blinter /path/to/batch/files --no-recursive
# Analyze with summary
python -m blinter script.bat --summary
# Create configuration file
python -m blinter --create-config
# Ignore configuration file
python -m blinter script.bat --no-config
# Get help
python -m blinter --help
```
**If using standalone executable:**
```cmd
# Analyze a single batch file
Blinter-v1.0.x-windows.exe script.bat
# Analyze all batch files in a directory (recursive)
Blinter-v1.0.x-windows.exe /path/to/batch/files
# Analyze batch files in directory only (non-recursive)
Blinter-v1.0.x-windows.exe /path/to/batch/files --no-recursive
# Analyze with summary
Blinter-v1.0.x-windows.exe script.bat --summary
# Get help
Blinter-v1.0.x-windows.exe --help
```
**If using manual installation:**
```cmd
# Analyze a single batch file
python blinter.py script.bat
# Analyze all batch files in a directory (recursive)
python blinter.py /path/to/batch/files
# Analyze batch files in directory only (non-recursive)
python blinter.py /path/to/batch/files --no-recursive
# Analyze with summary
python blinter.py script.bat --summary
# Create configuration file
python blinter.py --create-config
# Ignore configuration file
python blinter.py script.bat --no-config
# Get help
python blinter.py --help
```
### Command Line Options
- `<path>`: Path to a batch file (`.bat` or `.cmd`) OR directory containing batch files
- `--summary`: Display summary statistics of issues found
- `--severity`: Show detailed severity level breakdown (always included)
- `--no-recursive`: When processing directories, only analyze files in the specified directory (not subdirectories)
- `--no-config`: Don't use configuration file (blinter.ini) even if it exists
- `--create-config`: Create a default blinter.ini configuration file and exit
- `--help`: Show help menu and rule categories
**Note:** Command line options override configuration file settings. Blinter automatically looks for `blinter.ini` in the current directory.
### Configuration File Options ๐
| Section | Setting | Description | Default |
|---------|---------|-------------|---------|
| `[general]` | `recursive` | Search subdirectories when analyzing folders | `true` |
| `[general]` | `show_summary` | Display summary statistics after analysis | `false` |
| `[general]` | `max_line_length` | Maximum line length for S011 rule | `120` |
| `[general]` | `min_severity` | Minimum severity level to report | None (all) |
| `[rules]` | `enabled_rules` | Comma-separated list of rules to enable exclusively | None (all enabled) |
| `[rules]` | `disabled_rules` | Comma-separated list of rules to disable | None |
### Command Line Override
Command line options always override configuration file settings:
```cmd
# Use config file settings
python -m blinter myscript.bat
# Override config to show summary
python -m blinter myscript.bat --summary
# Ignore config file completely
python -m blinter myscript.bat --no-config
```
### ๐ Inline Suppression Comments
You can suppress specific linter warnings directly in your batch files using special comments:
#### Suppress Next Line
```batch
REM LINT:IGNORE E009
ECHO '' .... Represents a " character
```
#### Suppress Current Line
```batch
REM LINT:IGNORE-LINE S013
```
#### Suppress Multiple Rules
```batch
REM LINT:IGNORE E009, W011, S004
ECHO Unmatched quotes "
```
#### Suppress All Rules on Line
```batch
REM LINT:IGNORE
REM This line and the next will be ignored for all rules
```
**Supported formats:**
- `REM LINT:IGNORE <code>` - Suppress specific rule(s) on the **next line**
- `REM LINT:IGNORE` - Suppress all rules on the **next line**
- `REM LINT:IGNORE-LINE <code>` - Suppress specific rule(s) on the **same line**
- `REM LINT:IGNORE-LINE` - Suppress all rules on the **same line**
- `:: LINT:IGNORE <code>` - Alternative comment syntax (also supported)
**Use cases:**
- Suppress false positives that can't be fixed
- Ignore intentional deviations from best practices
- Handle edge cases in documentation or help text
- Temporarily ignore issues during development
### ๐ **Programmatic API Usage**
Blinter provides a powerful Python API for integration into your applications:
```python
import blinter
# Basic usage
issues = blinter.lint_batch_file("script.bat")
for issue in issues:
print(f"Line {issue.line_number}: {issue.rule.name} ({issue.rule.code})")
# With custom configuration
from blinter import BlinterConfig, RuleSeverity
config = BlinterConfig(
max_line_length=80,
disabled_rules={"S007", "S011"},
min_severity=RuleSeverity.WARNING
)
issues = blinter.lint_batch_file("script.bat", config=config)
# Process results
for issue in issues:
print(f"Line {issue.line_number}: {issue.rule.name}")
print(f" {issue.rule.explanation}")
print(f" Fix: {issue.rule.recommendation}")
# Thread-safe design allows safe concurrent usage
# You can implement your own concurrent processing if needed
from concurrent.futures import ThreadPoolExecutor
files = ["script1.bat", "script2.cmd", "script3.bat"]
with ThreadPoolExecutor(max_workers=4) as executor:
results = list(executor.map(blinter.lint_batch_file, files))
```
### ๐ง **Configuration Options**
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `file_path` | `str` | Required | Path to batch file to analyze |
| `max_line_length` | `int` | `120` | Maximum line length for S011 rule |
| `enable_style_rules` | `bool` | `True` | Enable/disable style-related rules |
| `enable_performance_rules` | `bool` | `True` | Enable/disable performance rules |
*Note: Security rules are always enabled for safety.*
### Supported File Types
- `.bat` files (traditional batch files)
- `.cmd` files (recommended for modern Windows)
- **Unicode filenames** and international characters supported
- **Large files** (10MB+) handled efficiently with performance monitoring
### ๐ **Directory Processing**
Blinter can analyze entire directories of batch files with powerful options:
- **Recursive Analysis**: Automatically finds and processes all `.bat` and `.cmd` files in directories and subdirectories
- **Non-Recursive Mode**: Use `--no-recursive` to analyze only files in the specified directory
- **Batch Processing**: Handles multiple files efficiently with consolidated reporting
- **Error Resilience**: Continues processing other files even if some files have encoding or permission issues
- **Progress Tracking**: Shows detailed results for each file plus combined summary statistics
**Examples:**
```cmd
# Pip installation:
python -m blinter ./my-batch-scripts # Analyze all files recursively
python -m blinter . --no-recursive # Current directory only
python -m blinter ./scripts --summary # With summary statistics
# Standalone executable:
Blinter-v1.0.x-windows.exe ./my-batch-scripts # Analyze all files recursively
Blinter-v1.0.x-windows.exe . --no-recursive # Current directory only
Blinter-v1.0.x-windows.exe ./scripts --summary # With summary statistics
# Manual installation:
python blinter.py ./my-batch-scripts # Analyze all files recursively
python blinter.py . --no-recursive # Current directory only
python blinter.py ./scripts --summary # With summary statistics
```
## ๐ฅ **Integration Example**
### CI/CD Integration
```yaml
# Example GitHub Actions workflow
- name: Lint Batch Files
run: |
python -c "
import blinter
import sys
issues = blinter.lint_batch_file('deploy.bat')
errors = [i for i in issues if i.rule.severity.value == 'Error']
if errors:
print(f'Found {len(errors)} critical errors!')
sys.exit(1)
print(f'โ
Batch file passed with {len(issues)} total issues')
"
```
## Contributing ๐ค
**Contributions are welcome!**
### Ways to Contribute
- ๐ Report bugs or issues
- ๐ก Suggest new rules or features
- ๐ Improve documentation
- ๐งช Add test cases
- ๐ง Submit bug fixes or enhancements
## License ๐
This project is licensed under the CRL License - see [LICENSE.md](https://github.com/tboy1337/Blinter/blob/main/LICENSE.md) for details.
Raw data
{
"_id": null,
"home_page": null,
"name": "Blinter",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": "tboy1337 <tboy1337@proton.me>",
"keywords": "lint, python, windows, analysis, script, linting, linter, static-analysis, static, batch, batch-file, cmd, batch-script, batchfile, bat, script-analysis",
"author": null,
"author_email": "tboy1337 <tboy1337@proton.me>",
"download_url": "https://files.pythonhosted.org/packages/4a/dc/25aa91382bb77f042a1e26e406f9ef424bf4e3ad0c370434407544eb28fb/blinter-1.0.46.tar.gz",
"platform": null,
"description": "# Blinter \ud83d\ude80\n\n**Blinter** is a linter for Windows batch files (`.bat` and `.cmd`). It provides comprehensive static analysis to identify syntax errors, security vulnerabilities, performance issues and style problems. Blinter helps you write safer, more reliable and maintainable batch scripts. Even in 2025, batch files deserve professional tooling! \ud83d\udcbb\n\n- \u2705 **Configurable Options** - Configurable rules, logging, robust error handling\n- \u2705 **Unicode Support** - Support for international characters and filenames\n- \u2705 **Performance Optimized** - Handles large files (10MB+) efficiently\n\n## Features \u2728\n\n### \ud83d\udd0d **Rule Categories**\n- **157 Built-in Rules** across 5 severity levels\n- **Error Level (E001-E999)**: Critical syntax errors that prevent execution\n- **Warning Level (W001-W999)**: Potential runtime issues and bad practices\n- **Style Level (S001-S999)**: Code formatting and readability improvements\n- **Security Level (SEC001+)**: Security vulnerabilities and dangerous operations\n- **Performance Level (P001-P999)**: Optimization opportunities and efficiency improvements\n\n\ud83d\udcd6 **For complete rule descriptions with examples and implementation details, see [Batch-File-Linter-Requirements.md](https://github.com/tboy1337/Blinter/blob/main/docs/Batch-File-Linter-Requirements.md)**\n\n### \ud83d\udccb **Output Format**\n- **Rule Codes**: Each issue has a unique identifier (e.g., E002, W005, SEC003)\n- **Clear Explanations**: Detailed descriptions of why each issue matters\n- **Actionable Recommendations**: Specific guidance on how to fix problems\n- **Line-by-Line Analysis**: Precise location of every issue\n- **Context Information**: Additional details about detected problems\n\n### \ud83d\ude80 **Advanced Analysis**\n- **Static Code Analysis**: Detects unreachable code and logic errors\n- **Advanced Variable Expansion**: Validates percent-tilde syntax (%~n1), string operations, and SET /A arithmetic\n- **Command-Specific Validation**: FOR loop variations, IF statement best practices, deprecated command detection\n- **Variable Tracking**: Identifies undefined variables and unsafe usage patterns\n- **Security Scanning**: Path traversal attacks, command injection risks, unsafe temp file creation\n- **Performance Optimization**: DIR flag optimization, unnecessary output detection, string operation efficiency\n- **Cross-Platform Compatibility**: Warns about Windows version issues and deprecated commands\n- **Large File Handling**: Efficiently processes files up to 10MB+ with performance warnings\n- **Robust Encoding Detection**: Handles UTF-8, UTF-16, Latin-1 and 6 more encoding formats\n- **Advanced Escaping Techniques**: Validates caret escape sequences, multilevel escaping, and continuation characters\n- **Professional FOR Command Analysis**: Checks for usebackq, proper tokenizing, delimiters, and skip options\n- **Process Management Best Practices**: Timeout command usage, process verification, and restart patterns\n- **Enhanced Security Patterns**: User input validation, temporary file security, and self-modification detection\n\n## Installation \ud83d\udee0\ufe0f\n\n### \ud83d\ude80 Quick Start (Recommended)\n\n**Option 1: Install via pip**\n```cmd\npip install Blinter\n```\n\n**Option 2: Download standalone executable**\n- Download the latest `Blinter-v1.0.x-windows.zip` from [GitHub Releases](https://github.com/tboy1337/Blinter/releases)\n\n### \ud83d\udd27 Manual Installation\n\n1. Clone the repository:\n```cmd\ngit clone https://github.com/tboy1337/Blinter.git\ncd Blinter\n```\n\n2. (Optional) Create a virtual environment:\n```cmd\npython -m venv venv\nvenv\\Scripts\\Activate.ps1\n```\n\n3. (Optional but recommended) Install dependencies:\n```cmd\npip install -r requirements.txt\n```\n\n### Prerequisites\n- **Python 3.9+** (required for pip installation and development)\n- **Windows OS** (required for standalone executable)\n\n## Usage \ud83d\udcdf\n\n### Basic Usage\n\n**If installed via pip:**\n```cmd\n# Analyze a single batch file\npython -m blinter script.bat\n\n# Analyze all batch files in a directory (recursive)\npython -m blinter /path/to/batch/files\n\n# Analyze batch files in directory only (non-recursive)\npython -m blinter /path/to/batch/files --no-recursive\n\n# Analyze with summary\npython -m blinter script.bat --summary\n\n# Create configuration file\npython -m blinter --create-config\n\n# Ignore configuration file\npython -m blinter script.bat --no-config\n\n# Get help\npython -m blinter --help\n```\n\n**If using standalone executable:**\n```cmd\n# Analyze a single batch file\nBlinter-v1.0.x-windows.exe script.bat\n\n# Analyze all batch files in a directory (recursive)\nBlinter-v1.0.x-windows.exe /path/to/batch/files\n\n# Analyze batch files in directory only (non-recursive)\nBlinter-v1.0.x-windows.exe /path/to/batch/files --no-recursive\n\n# Analyze with summary\nBlinter-v1.0.x-windows.exe script.bat --summary\n\n# Get help\nBlinter-v1.0.x-windows.exe --help\n```\n\n**If using manual installation:**\n```cmd\n# Analyze a single batch file\npython blinter.py script.bat\n\n# Analyze all batch files in a directory (recursive)\npython blinter.py /path/to/batch/files\n\n# Analyze batch files in directory only (non-recursive)\npython blinter.py /path/to/batch/files --no-recursive\n\n# Analyze with summary\npython blinter.py script.bat --summary\n\n# Create configuration file\npython blinter.py --create-config\n\n# Ignore configuration file\npython blinter.py script.bat --no-config\n\n# Get help\npython blinter.py --help\n```\n\n### Command Line Options\n\n- `<path>`: Path to a batch file (`.bat` or `.cmd`) OR directory containing batch files\n- `--summary`: Display summary statistics of issues found\n- `--severity`: Show detailed severity level breakdown (always included)\n- `--no-recursive`: When processing directories, only analyze files in the specified directory (not subdirectories)\n- `--no-config`: Don't use configuration file (blinter.ini) even if it exists\n- `--create-config`: Create a default blinter.ini configuration file and exit\n- `--help`: Show help menu and rule categories\n\n**Note:** Command line options override configuration file settings. Blinter automatically looks for `blinter.ini` in the current directory.\n\n### Configuration File Options \ud83d\udcdd\n\n| Section | Setting | Description | Default |\n|---------|---------|-------------|---------|\n| `[general]` | `recursive` | Search subdirectories when analyzing folders | `true` |\n| `[general]` | `show_summary` | Display summary statistics after analysis | `false` |\n| `[general]` | `max_line_length` | Maximum line length for S011 rule | `120` |\n| `[general]` | `min_severity` | Minimum severity level to report | None (all) |\n| `[rules]` | `enabled_rules` | Comma-separated list of rules to enable exclusively | None (all enabled) |\n| `[rules]` | `disabled_rules` | Comma-separated list of rules to disable | None |\n\n### Command Line Override\n\nCommand line options always override configuration file settings:\n\n```cmd\n# Use config file settings\npython -m blinter myscript.bat\n\n# Override config to show summary\npython -m blinter myscript.bat --summary\n\n# Ignore config file completely\npython -m blinter myscript.bat --no-config\n```\n\n### \ud83d\udd15 Inline Suppression Comments\n\nYou can suppress specific linter warnings directly in your batch files using special comments:\n\n#### Suppress Next Line\n```batch\nREM LINT:IGNORE E009\nECHO '' .... Represents a \" character\n```\n\n#### Suppress Current Line\n```batch\nREM LINT:IGNORE-LINE S013\n```\n\n#### Suppress Multiple Rules\n```batch\nREM LINT:IGNORE E009, W011, S004\nECHO Unmatched quotes \"\n```\n\n#### Suppress All Rules on Line\n```batch\nREM LINT:IGNORE\nREM This line and the next will be ignored for all rules\n```\n\n**Supported formats:**\n- `REM LINT:IGNORE <code>` - Suppress specific rule(s) on the **next line**\n- `REM LINT:IGNORE` - Suppress all rules on the **next line**\n- `REM LINT:IGNORE-LINE <code>` - Suppress specific rule(s) on the **same line**\n- `REM LINT:IGNORE-LINE` - Suppress all rules on the **same line**\n- `:: LINT:IGNORE <code>` - Alternative comment syntax (also supported)\n\n**Use cases:**\n- Suppress false positives that can't be fixed\n- Ignore intentional deviations from best practices\n- Handle edge cases in documentation or help text\n- Temporarily ignore issues during development\n\n### \ud83d\udc0d **Programmatic API Usage**\n\nBlinter provides a powerful Python API for integration into your applications:\n\n```python\nimport blinter\n\n# Basic usage\nissues = blinter.lint_batch_file(\"script.bat\")\nfor issue in issues:\n print(f\"Line {issue.line_number}: {issue.rule.name} ({issue.rule.code})\")\n\n# With custom configuration\nfrom blinter import BlinterConfig, RuleSeverity\nconfig = BlinterConfig(\n max_line_length=80,\n disabled_rules={\"S007\", \"S011\"},\n min_severity=RuleSeverity.WARNING\n)\nissues = blinter.lint_batch_file(\"script.bat\", config=config)\n\n# Process results\nfor issue in issues:\n print(f\"Line {issue.line_number}: {issue.rule.name}\")\n print(f\" {issue.rule.explanation}\")\n print(f\" Fix: {issue.rule.recommendation}\")\n\n\n# Thread-safe design allows safe concurrent usage\n# You can implement your own concurrent processing if needed\nfrom concurrent.futures import ThreadPoolExecutor\n\nfiles = [\"script1.bat\", \"script2.cmd\", \"script3.bat\"]\nwith ThreadPoolExecutor(max_workers=4) as executor:\n results = list(executor.map(blinter.lint_batch_file, files))\n```\n\n### \ud83d\udd27 **Configuration Options**\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `file_path` | `str` | Required | Path to batch file to analyze |\n| `max_line_length` | `int` | `120` | Maximum line length for S011 rule |\n| `enable_style_rules` | `bool` | `True` | Enable/disable style-related rules |\n| `enable_performance_rules` | `bool` | `True` | Enable/disable performance rules |\n\n*Note: Security rules are always enabled for safety.*\n\n### Supported File Types\n- `.bat` files (traditional batch files)\n- `.cmd` files (recommended for modern Windows)\n- **Unicode filenames** and international characters supported\n- **Large files** (10MB+) handled efficiently with performance monitoring\n\n### \ud83d\udcc1 **Directory Processing**\n\nBlinter can analyze entire directories of batch files with powerful options:\n\n- **Recursive Analysis**: Automatically finds and processes all `.bat` and `.cmd` files in directories and subdirectories\n- **Non-Recursive Mode**: Use `--no-recursive` to analyze only files in the specified directory\n- **Batch Processing**: Handles multiple files efficiently with consolidated reporting\n- **Error Resilience**: Continues processing other files even if some files have encoding or permission issues\n- **Progress Tracking**: Shows detailed results for each file plus combined summary statistics\n\n**Examples:**\n```cmd\n# Pip installation:\npython -m blinter ./my-batch-scripts # Analyze all files recursively\npython -m blinter . --no-recursive # Current directory only\npython -m blinter ./scripts --summary # With summary statistics\n\n# Standalone executable:\nBlinter-v1.0.x-windows.exe ./my-batch-scripts # Analyze all files recursively\nBlinter-v1.0.x-windows.exe . --no-recursive # Current directory only\nBlinter-v1.0.x-windows.exe ./scripts --summary # With summary statistics\n\n# Manual installation:\npython blinter.py ./my-batch-scripts # Analyze all files recursively\npython blinter.py . --no-recursive # Current directory only \npython blinter.py ./scripts --summary # With summary statistics\n```\n\n## \ud83d\udd25 **Integration Example**\n\n### CI/CD Integration\n```yaml\n# Example GitHub Actions workflow\n- name: Lint Batch Files\n run: |\n python -c \"\n import blinter\n import sys\n issues = blinter.lint_batch_file('deploy.bat')\n errors = [i for i in issues if i.rule.severity.value == 'Error']\n if errors:\n print(f'Found {len(errors)} critical errors!')\n sys.exit(1)\n print(f'\u2705 Batch file passed with {len(issues)} total issues')\n \"\n```\n\n## Contributing \ud83e\udd1d\n\n**Contributions are welcome!** \n\n### Ways to Contribute\n- \ud83d\udc1b Report bugs or issues\n- \ud83d\udca1 Suggest new rules or features\n- \ud83d\udcd6 Improve documentation\n- \ud83e\uddea Add test cases\n- \ud83d\udd27 Submit bug fixes or enhancements\n\n## License \ud83d\udcc4\n\nThis project is licensed under the CRL License - see [LICENSE.md](https://github.com/tboy1337/Blinter/blob/main/LICENSE.md) for details.\n",
"bugtrack_url": null,
"license": "CRL",
"summary": "Blinter is a linter for Windows batch files. It provides comprehensive static analysis to identify syntax errors, security vulnerabilities, performance issues and style problems.",
"version": "1.0.46",
"project_urls": {
"Documentation": "https://github.com/tboy1337/Blinter",
"Homepage": "https://github.com/tboy1337/Blinter",
"Issues": "https://github.com/tboy1337/Blinter/issues",
"Repository": "https://github.com/tboy1337/Blinter.git"
},
"split_keywords": [
"lint",
" python",
" windows",
" analysis",
" script",
" linting",
" linter",
" static-analysis",
" static",
" batch",
" batch-file",
" cmd",
" batch-script",
" batchfile",
" bat",
" script-analysis"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "c2e814a13e34ee2e6482e8ea1184988854b2f0ee0efeb224301b2eea46d7964f",
"md5": "3820a4b848fa8cf88f637d15e20a2133",
"sha256": "b7cab7085bfde2bda505197a19fd3f4586205a23ec98498eda1712a1d297847b"
},
"downloads": -1,
"filename": "blinter-1.0.46-py3-none-any.whl",
"has_sig": false,
"md5_digest": "3820a4b848fa8cf88f637d15e20a2133",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 68818,
"upload_time": "2025-10-10T03:54:29",
"upload_time_iso_8601": "2025-10-10T03:54:29.813974Z",
"url": "https://files.pythonhosted.org/packages/c2/e8/14a13e34ee2e6482e8ea1184988854b2f0ee0efeb224301b2eea46d7964f/blinter-1.0.46-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4adc25aa91382bb77f042a1e26e406f9ef424bf4e3ad0c370434407544eb28fb",
"md5": "e8cd067e30c7350e84c836dba8d578e5",
"sha256": "f0ac427710ff9e740fa420b5e383f8d508c95ec712b513fde48a1babaec1a003"
},
"downloads": -1,
"filename": "blinter-1.0.46.tar.gz",
"has_sig": false,
"md5_digest": "e8cd067e30c7350e84c836dba8d578e5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 145305,
"upload_time": "2025-10-10T03:54:30",
"upload_time_iso_8601": "2025-10-10T03:54:30.832072Z",
"url": "https://files.pythonhosted.org/packages/4a/dc/25aa91382bb77f042a1e26e406f9ef424bf4e3ad0c370434407544eb28fb/blinter-1.0.46.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-10 03:54:30",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "tboy1337",
"github_project": "Blinter",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"requirements": [
{
"name": "chardet",
"specs": []
}
],
"lcname": "blinter"
}