1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
//! Dclint-RS: Native Rust Docker Compose Linter
//!
//! A Rust translation of the docker-compose-linter project.
//!
//! # Attribution
//!
//! This module is a derivative work based on [docker-compose-linter](https://github.com/zavoloklom/docker-compose-linter),
//! originally written in TypeScript by Sergey Kupletsky.
//!
//! **Original Project:** <https://github.com/zavoloklom/docker-compose-linter>
//! **Original License:** MIT
//!
//! # Features
//!
//! - Docker Compose YAML parsing with position tracking
//! - 15 configurable linting rules (DCL001-DCL015)
//! - Auto-fix capability for 8 rules
//! - Multiple output formats (JSON, Stylish, GitHub Actions, etc.)
//! - Comment-based rule disabling
//!
//! # Example
//!
//! ```rust,ignore
//! use syncable_cli::analyzer::dclint::{lint, DclintConfig, LintResult};
//!
//! let compose = r#"
//! services:
//! web:
//! image: nginx:latest
//! ports:
//! - "8080:80"
//! "#;
//!
//! let config = DclintConfig::default();
//! let result = lint(compose, &config);
//!
//! for failure in result.failures {
//! println!("{}: {} - {}", failure.line, failure.code, failure.message);
//! }
//! ```
//!
//! # Rules
//!
//! | Code | Name | Fixable | Description |
//! |--------|-----------------------------------------|---------|------------------------------------------------|
//! | DCL001 | no-build-and-image | No | Service cannot have both build and image |
//! | DCL002 | no-duplicate-container-names | No | Container names must be unique |
//! | DCL003 | no-duplicate-exported-ports | No | Exported ports must be unique |
//! | DCL004 | no-quotes-in-volumes | Yes | Volume paths should not be quoted |
//! | DCL005 | no-unbound-port-interfaces | No | Ports should bind to specific interface |
//! | DCL006 | no-version-field | Yes | Version field is deprecated |
//! | DCL007 | require-project-name-field | No | Require top-level name field |
//! | DCL008 | require-quotes-in-ports | Yes | Port mappings should be quoted |
//! | DCL009 | service-container-name-regex | No | Container name format validation |
//! | DCL010 | service-dependencies-alphabetical-order | Yes | Sort depends_on alphabetically |
//! | DCL011 | service-image-require-explicit-tag | No | Images need explicit tags |
//! | DCL012 | service-keys-order | Yes | Service keys in standard order |
//! | DCL013 | service-ports-alphabetical-order | Yes | Sort ports alphabetically |
//! | DCL014 | services-alphabetical-order | Yes | Sort services alphabetically |
//! | DCL015 | top-level-properties-order | Yes | Top-level keys in standard order |
// Re-export main types and functions
pub use DclintConfig;
pub use ;
pub use ;
pub use ;