fix(config): supplement missing fields and fix comments in -g template
Add missing fields to GenerateConfigYAML output: - proxy.timeout.dial (TCP dial timeout) - health_check.slow_start and health_check.match (status/body/headers) - proxy.buffering.buffers (multi-buffer config) - lua.scripts[].route and route_type (routing mode) Fix coroutine_stack_size comment to show actual default (64).
This commit is contained in:
parent
9bdb8b24a7
commit
2ad056d0ca
131
.agents/skills/update-generate-config.md
Normal file
131
.agents/skills/update-generate-config.md
Normal file
@ -0,0 +1,131 @@
|
||||
# Skill: 更新 -g 默认配置模板
|
||||
|
||||
当 config struct 新增/修改字段时,同步更新 `GenerateConfigYAML` 输出模板。
|
||||
|
||||
## 涉及文件
|
||||
|
||||
| 文件 | 职责 |
|
||||
|------|------|
|
||||
| `internal/config/*.go` | struct 定义(改字段) |
|
||||
| `internal/config/defaults.go` | `DefaultConfig()` 默认值 + `GenerateConfigYAML()` 模板 |
|
||||
| `internal/config/defaults_test.go` | `TestGenerateConfigYAML*` 覆盖率测试 |
|
||||
|
||||
## 更新流程
|
||||
|
||||
### 1. 修改 struct
|
||||
|
||||
在对应的 `*_config.go` 文件中添加/修改字段,确保:
|
||||
- 有 `yaml` tag
|
||||
- 有中文注释说明字段用途和有效值
|
||||
|
||||
### 2. 更新 DefaultConfig()
|
||||
|
||||
在 `defaults.go` 的 `DefaultConfig()` 函数中为新字段设置合理默认值。
|
||||
|
||||
### 3. 更新 GenerateConfigYAML()
|
||||
|
||||
在 `defaults.go` 的 `GenerateConfigYAML()` 函数中,找到对应区块,添加/修改模板行。
|
||||
|
||||
**规则:**
|
||||
|
||||
1. **格式一致性**:使用 `buf.WriteString` 写注释行,`fmt.Fprintf` 写带默认值的行
|
||||
2. **注释行前缀**:可选配置用 `#` 注释,必填/有默认值的配置直接输出
|
||||
3. **注释规范**:每行末尾 `#` 注释说明用途,新字段加 `# 有效值: a, b, c` 格式的可选值说明
|
||||
4. **默认值来源**:使用 `cfg.Servers[0].Xxx` 读取 `DefaultConfig()` 的值,不硬编码
|
||||
5. **缩进层级**:
|
||||
- 顶层配置无缩进(`logging:`, `http3:`)
|
||||
- server 内配置 4 空格(` listen:`)
|
||||
- server 子配置 6-8 空格(` access:`)
|
||||
- 注释中的示例配置也保持正确缩进
|
||||
|
||||
### 4. struct 字段 → GenerateConfigYAML 区块对照表
|
||||
|
||||
| struct 文件 | GenerateConfigYAML 区块 |
|
||||
|-------------|------------------------|
|
||||
| `config.go` → `Config.Mode` | mode 注释块(~L254) |
|
||||
| `config.go` → `Config.Mode` | servers 开头(~L263) |
|
||||
| `server_config.go` → `ServerConfig` | servers 列表内(L264-288) |
|
||||
| `server_config.go` → `TypesConfig` | types 注释块(~L292) |
|
||||
| `server_config.go` → `LimitRateConfig` | limit_rate 注释块(~L302) |
|
||||
| `monitoring_config.go` → `CacheAPIConfig` | cache_api 注释块(~L310) |
|
||||
| `variable_config.go` → `LuaMiddlewareConfig` | lua 注释块(~L324) |
|
||||
| `variable_config.go` → `CompressionConfig` | compression 块(~L607) |
|
||||
| `variable_config.go` → `RewriteRule` | rewrite 注释块(~L598) |
|
||||
| `server_config.go` → `StaticConfig` | static 块(~L349) |
|
||||
| `proxy_config.go` → `ProxyConfig` | proxy 注释块(~L385) |
|
||||
| `proxy_config.go` → `ProxyTimeout` | proxy.timeout(~L413) |
|
||||
| `proxy_config.go` → `ProxyBufferingConfig` | proxy.buffering(~L418) |
|
||||
| `proxy_config.go` → `HealthCheckConfig` | proxy.health_check(~L403) |
|
||||
| `proxy_config.go` → `ProxyHeaders` | proxy.headers(~L424) |
|
||||
| `cache_config.go` → `ProxyCacheConfig` | proxy.cache(~L435) |
|
||||
| `cache_config.go` → `ProxyCacheValidConfig` | proxy.cache_valid(~L448) |
|
||||
| `proxy_config.go` → `ProxySSLConfig` | proxy.proxy_ssl(~L454) |
|
||||
| `proxy_config.go` → `NextUpstreamConfig` | proxy.next_upstream(~L464) |
|
||||
| `proxy_config.go` → `BalancerByLuaConfig` | proxy.balancer_by_lua(~L467) |
|
||||
| `proxy_config.go` → `RedirectRewriteConfig` | proxy.redirect_rewrite(~L472) |
|
||||
| `ssl_config.go` → `SSLConfig` | ssl 注释块(~L486) |
|
||||
| `ssl_config.go` → `SessionTicketsConfig` | ssl.session_tickets(~L506) |
|
||||
| `ssl_config.go` → `ClientVerifyConfig` | ssl.client_verify(~L511) |
|
||||
| `performance_config.go` → `HTTP2Config` | ssl.http2(~L517) |
|
||||
| `security_config.go` → `SecurityConfig` | security 块(~L534) |
|
||||
| `security_config.go` → `AccessConfig`/`GeoIPConfig` | security.access/geoip(~L537) |
|
||||
| `security_config.go` → `RateLimitConfig` | security.rate_limit(~L555) |
|
||||
| `security_config.go` → `AuthConfig` | security.auth(~L564) |
|
||||
| `security_config.go` → `SecurityHeaders` | security.headers(~L573) |
|
||||
| `security_config.go` → `ErrorPageConfig` | security.error_page(~L581) |
|
||||
| `security_config.go` → `AuthRequestConfig` | security.auth_request(~L587) |
|
||||
| `performance_config.go` → `ShutdownConfig` | shutdown 块(~L623) |
|
||||
| `server_config.go` → `StreamConfig` | stream 注释块(~L631) |
|
||||
| `monitoring_config.go` → `LoggingConfig` | logging 块(~L662) |
|
||||
| `performance_config.go` → `PerformanceConfig` | performance 块(~L676) |
|
||||
| `performance_config.go` → `HTTP3Config` | http3 块(~L693) |
|
||||
| `monitoring_config.go` → `MonitoringConfig` | monitoring 块(~L703) |
|
||||
| `performance_config.go` → `ResolverConfig` | resolver 块(~L723) |
|
||||
| `variable_config.go` → `VariablesConfig` | variables 块(~L737) |
|
||||
| `variable_config.go` → `IncludeConfig` | include 注释块(~L745) |
|
||||
|
||||
### 5. 运行验证
|
||||
|
||||
```bash
|
||||
# 测试模板覆盖率(检查 struct 字段是否都在模板中出现)
|
||||
go test -v -run TestGenerateConfigYAML ./internal/config/...
|
||||
|
||||
# 测试 app 层 generateConfig 函数
|
||||
go test -v -run TestGenerateConfig ./internal/app/...
|
||||
|
||||
# 完整测试 + lint
|
||||
make test
|
||||
make lint
|
||||
```
|
||||
|
||||
## 添加新字段的模板示例
|
||||
|
||||
### 简单字符串字段(可选,注释形式)
|
||||
```go
|
||||
buf.WriteString(" # new_field: \"\" # 新字段说明(有效值: a, b, c)\n")
|
||||
```
|
||||
|
||||
### 带默认值的字段(使用 fmt.Fprintf)
|
||||
```go
|
||||
fmt.Fprintf(&buf, " # new_field: %d # 新字段说明\n", cfg.Servers[0].NewField)
|
||||
```
|
||||
|
||||
### 新的嵌套结构体
|
||||
```go
|
||||
buf.WriteString(" # new_section: # 新区块说明\n")
|
||||
buf.WriteString(" # enabled: false # 是否启用\n")
|
||||
buf.WriteString(" # option: \"\" # 选项说明\n")
|
||||
buf.WriteString("\n")
|
||||
```
|
||||
|
||||
## 常见遗漏检查清单
|
||||
|
||||
添加新字段后,逐项确认:
|
||||
|
||||
- [ ] struct 有 `yaml` tag
|
||||
- [ ] `DefaultConfig()` 有默认值
|
||||
- [ ] `GenerateConfigYAML()` 有注释行(可选字段)或输出行(有默认值的字段)
|
||||
- [ ] 注释中包含 `有效值:` 说明(枚举类字段)
|
||||
- [ ] `fmt.Fprintf` 使用 `cfg.Servers[0].Xxx` 而非硬编码数字
|
||||
- [ ] `TestGenerateConfigYAMLFieldsCoverage` 通过(它会检查 struct 字段是否出现在模板中)
|
||||
- [ ] `make lint` 无新增 warning
|
||||
315
doc-report.md
315
doc-report.md
@ -1,315 +0,0 @@
|
||||
# Lolly 项目缺少文档注释的导出标识符检测报告
|
||||
|
||||
## 概述
|
||||
|
||||
使用 AST 静态分析扫描 `/root/projects/lolly`,共发现 **180** 个导出的函数/类型/常量/变量缺少以标识符名称开头的文档注释(GoDoc)。
|
||||
|
||||
---
|
||||
|
||||
## 一、公共 API(非 internal 包)
|
||||
|
||||
| 文件 | 行号 | 类型 | 名称 |
|
||||
|------|------|------|------|
|
||||
| `gjson/gjson.go` | 35 | const | `ModuleName` |
|
||||
| `gjson/gjson.go` | 38 | const | `Version` |
|
||||
|
||||
**说明**:`gjson` 是项目中唯一的非 internal 子包,其导出的 `ModuleName` 和 `Version` 常量缺少文档注释。
|
||||
|
||||
---
|
||||
|
||||
## 二、internal 包中的缺失(按文件分组)
|
||||
|
||||
### internal/benchmark/tools/tools.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 13 | const | `Size100B` |
|
||||
| 14 | const | `Size1KB` |
|
||||
| 15 | const | `Size10KB` |
|
||||
| 16 | const | `Size100KB` |
|
||||
| 17 | const | `Size1MB` |
|
||||
| 36 | const | `ModeNormalResponse` |
|
||||
| 37 | const | `ModeRandomResponse` |
|
||||
| 38 | const | `ModeErrorResponse` |
|
||||
| 39 | const | `ModeDelayedResponse` |
|
||||
|
||||
### internal/config/config.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 33 | const | `DefaultPprofPath` |
|
||||
| 44 | const | `ServerModeSingle` |
|
||||
| 46 | const | `ServerModeVHost` |
|
||||
| 48 | const | `ServerModeMultiServer` |
|
||||
| 50 | const | `ServerModeAuto` |
|
||||
|
||||
### internal/converter/nginx/converter.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 28 | method | `Warning.String` |
|
||||
|
||||
### internal/converter/nginx/parser.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 31 | method | `*ParseError.Error` |
|
||||
|
||||
### internal/e2e/testutil/constants.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 18 | const | `ContainerStartupTimeout` |
|
||||
| 21 | const | `HealthCheckWaitTimeout` |
|
||||
| 24 | const | `HealthCheckDetectionTime` |
|
||||
| 27 | const | `CacheExpireBuffer` |
|
||||
| 30 | const | `DefaultTestTimeout` |
|
||||
| 33 | const | `DefaultClientTimeout` |
|
||||
| 36 | const | `ConcurrentRequestTimeout` |
|
||||
| 39 | const | `ShortTestTimeout` |
|
||||
| 42 | const | `MediumTestTimeout` |
|
||||
| 48 | const | `DefaultBackendCount` |
|
||||
| 51 | const | `DefaultConcurrentRequests` |
|
||||
| 54 | const | `HighConcurrentRequests` |
|
||||
| 57 | const | `CacheTestMaxAge` |
|
||||
| 60 | const | `CacheTestShortMaxAge` |
|
||||
| 66 | const | `TLSVersion12` |
|
||||
| 69 | const | `TLSVersion13` |
|
||||
|
||||
### internal/e2e/testutil/websocket.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 41 | func | `WithWSHeaders` |
|
||||
|
||||
### internal/lua/api_log.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 29 | const | `LogStderr` |
|
||||
| 30 | const | `LogEmerg` |
|
||||
| 31 | const | `LogAlert` |
|
||||
| 32 | const | `LogCrit` |
|
||||
| 33 | const | `LogErr` |
|
||||
| 34 | const | `LogWarn` |
|
||||
| 35 | const | `LogNotice` |
|
||||
| 36 | const | `LogInfo` |
|
||||
| 37 | const | `LogDebug` |
|
||||
| 42 | const | `HTTPContinue` |
|
||||
| 43 | const | `HTTPSwitchingProtocols` |
|
||||
| 44 | const | `HTTPOK` |
|
||||
| 45 | const | `HTTPCreated` |
|
||||
| 46 | const | `HTTPAccepted` |
|
||||
| 47 | const | `HTTPNoContent` |
|
||||
| 48 | const | `HTTPPartialContent` |
|
||||
| 49 | const | `HTTPMovedPermanently` |
|
||||
| 50 | const | `HTTPFound` |
|
||||
| 51 | const | `HTTPSeeOther` |
|
||||
| 52 | const | `HTTPNotModified` |
|
||||
| 53 | const | `HTTPTemporaryRedirect` |
|
||||
| 54 | const | `HTTPPermanentRedirect` |
|
||||
| 55 | const | `HTTPBadRequest` |
|
||||
| 56 | const | `HTTPUnauthorized` |
|
||||
| 57 | const | `HTTPForbidden` |
|
||||
| 58 | const | `HTTPNotFound` |
|
||||
| 59 | const | `HTTPMethodNotAllowed` |
|
||||
| 60 | const | `HTTPRequestTimeout` |
|
||||
| 61 | const | `HTTPConflict` |
|
||||
| 62 | const | `HTTPGone` |
|
||||
| 63 | const | `HTTPLengthRequired` |
|
||||
| 64 | const | `HTTPPayloadTooLarge` |
|
||||
| 65 | const | `HTTPURITooLong` |
|
||||
| 66 | const | `HTTPUnsupportedMedia` |
|
||||
| 67 | const | `HTTPRangeNotSatisfiable` |
|
||||
| 68 | const | `HTTPTooManyRequests` |
|
||||
| 69 | const | `HTTPInternalServerError` |
|
||||
| 70 | const | `HTTPNotImplemented` |
|
||||
| 71 | const | `HTTPBadGateway` |
|
||||
| 72 | const | `HTTPServiceUnavailable` |
|
||||
| 73 | const | `HTTPGatewayTimeout` |
|
||||
| 74 | const | `HTTPHTTPVersionNotSupported` |
|
||||
|
||||
### internal/lua/api_req.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 36 | const | `APILayerDirect` |
|
||||
| 40 | const | `APILayerCompatible` |
|
||||
| 44 | const | `APILayerPseudoNonBlocking` |
|
||||
| 58 | method | `ngxReqAPILayer.String` |
|
||||
|
||||
### internal/lua/cache.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 38 | const | `CacheKeyInline` |
|
||||
| 41 | const | `CacheKeyFile` |
|
||||
|
||||
### internal/lua/coroutine.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 35 | const | `PhaseInit` |
|
||||
| 37 | const | `PhaseRewrite` |
|
||||
| 39 | const | `PhaseAccess` |
|
||||
| 41 | const | `PhaseContent` |
|
||||
| 43 | const | `PhaseLog` |
|
||||
| 45 | const | `PhaseHeaderFilter` |
|
||||
| 47 | const | `PhaseBodyFilter` |
|
||||
| 50 | method | `Phase.String` |
|
||||
|
||||
### internal/lua/socket_manager.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 36 | const | `SocketStateIdle` |
|
||||
| 38 | const | `SocketStateConnecting` |
|
||||
| 40 | const | `SocketStateConnected` |
|
||||
| 42 | const | `SocketStateSending` |
|
||||
| 44 | const | `SocketStateReceiving` |
|
||||
| 46 | const | `SocketStateClosing` |
|
||||
| 48 | const | `SocketStateClosed` |
|
||||
| 50 | const | `SocketStateError` |
|
||||
| 83 | const | `OpConnect` |
|
||||
| 85 | const | `OpSend` |
|
||||
| 87 | const | `OpReceive` |
|
||||
| 89 | const | `OpClose` |
|
||||
|
||||
### internal/matcher/location.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 257 | method | `*ConflictError.Error` |
|
||||
|
||||
### internal/matcher/matcher.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 27 | const | `LocationTypeExact` |
|
||||
| 28 | const | `LocationTypePrefix` |
|
||||
| 29 | const | `LocationTypePrefixPriority` |
|
||||
| 30 | const | `LocationTypeRegex` |
|
||||
| 31 | const | `LocationTypeRegexCaseless` |
|
||||
| 32 | const | `LocationTypeNamed` |
|
||||
|
||||
### internal/middleware/compression/compression.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 100 | const | `AlgorithmGzip` |
|
||||
| 102 | const | `AlgorithmBrotli` |
|
||||
|
||||
### internal/middleware/limitrate/limitrate.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 15 | const | `LargeFileStrategySkip` |
|
||||
| 17 | const | `LargeFileStrategyCoarse` |
|
||||
|
||||
### internal/middleware/rewrite/rewrite.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 41 | const | `FlagLast` |
|
||||
| 44 | const | `FlagRedirect` |
|
||||
| 47 | const | `FlagPermanent` |
|
||||
| 50 | const | `FlagBreak` |
|
||||
|
||||
### internal/middleware/security/access.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 47 | const | `ActionAllow` |
|
||||
| 49 | const | `ActionDeny` |
|
||||
|
||||
### internal/middleware/security/auth.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 52 | const | `HashBcrypt` |
|
||||
| 54 | const | `HashArgon2id` |
|
||||
|
||||
### internal/resolver/resolver.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 446 | method | `*noopResolver.LookupHost` |
|
||||
| 450 | method | `*noopResolver.LookupHostWithCache` |
|
||||
| 454 | method | `*noopResolver.Refresh` |
|
||||
| 458 | method | `*noopResolver.Start` |
|
||||
| 462 | method | `*noopResolver.Stop` |
|
||||
| 466 | method | `*noopResolver.Stats` |
|
||||
|
||||
### internal/ssl/client_verify.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 33 | const | `VerifyOff` |
|
||||
| 35 | const | `VerifyOn` |
|
||||
| 37 | const | `VerifyOptional` |
|
||||
| 39 | const | `VerifyOptionalNoCA` |
|
||||
|
||||
### internal/stream/stream.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 82 | method | `*roundRobin.Select` |
|
||||
| 171 | method | `*weightedRoundRobin.Select` |
|
||||
| 244 | method | `*ipHash.Select` |
|
||||
| 248 | method | `*ipHash.SelectByIP` |
|
||||
|
||||
### internal/utils/httperror.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 26 | var | `ErrNotFound` |
|
||||
| 27 | var | `ErrForbidden` |
|
||||
| 28 | var | `ErrUnauthorized` |
|
||||
| 29 | var | `ErrBadGateway` |
|
||||
| 30 | var | `ErrGatewayTimeout` |
|
||||
| 31 | var | `ErrInternalError` |
|
||||
| 32 | var | `ErrTooManyRequests` |
|
||||
| 33 | var | `ErrServiceUnavailable` |
|
||||
|
||||
### internal/variable/builtin.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 19 | const | `VarHost` |
|
||||
| 20 | const | `VarRemoteAddr` |
|
||||
| 21 | const | `VarRemotePort` |
|
||||
| 22 | const | `VarRequestURI` |
|
||||
| 23 | const | `VarURI` |
|
||||
| 24 | const | `VarArgs` |
|
||||
| 25 | const | `VarRequestMethod` |
|
||||
| 26 | const | `VarScheme` |
|
||||
| 27 | const | `VarServerName` |
|
||||
| 28 | const | `VarServerPort` |
|
||||
| 29 | const | `VarStatus` |
|
||||
| 30 | const | `VarBodyBytesSent` |
|
||||
| 31 | const | `VarRequestTime` |
|
||||
| 32 | const | `VarTimeLocal` |
|
||||
| 33 | const | `VarTimeISO8601` |
|
||||
| 34 | const | `VarRequestID` |
|
||||
| 36 | const | `VarUpstreamAddr` |
|
||||
| 37 | const | `VarUpstreamStatus` |
|
||||
| 38 | const | `VarUpstreamResponseTime` |
|
||||
| 39 | const | `VarUpstreamConnectTime` |
|
||||
| 40 | const | `VarUpstreamHeaderTime` |
|
||||
|
||||
### internal/variable/ssl.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 24 | const | `VarSSLClientVerify` |
|
||||
| 25 | const | `VarSSLClientSerial` |
|
||||
| 26 | const | `VarSSLClientSubject` |
|
||||
| 27 | const | `VarSSLClientIssuer` |
|
||||
| 28 | const | `VarSSLClientFingerprint` |
|
||||
| 29 | const | `VarSSLClientNotBefore` |
|
||||
| 30 | const | `VarSSLClientNotAfter` |
|
||||
| 31 | const | `VarSSLClientDNS` |
|
||||
| 32 | const | `VarSSLClientEmail` |
|
||||
|
||||
### internal/version/version.go
|
||||
| 行号 | 类型 | 名称 |
|
||||
|------|------|------|
|
||||
| 9 | var | `Version` |
|
||||
| 11 | var | `GitCommit` |
|
||||
| 13 | var | `GitBranch` |
|
||||
| 15 | var | `BuildTime` |
|
||||
| 17 | var | `GoVersion` |
|
||||
| 19 | var | `BuildPlatform` |
|
||||
|
||||
---
|
||||
|
||||
## 统计汇总
|
||||
|
||||
| 类别 | 数量 |
|
||||
|------|------|
|
||||
| 公共 API(非 internal) | 2 |
|
||||
| internal 常量 | 134 |
|
||||
| internal 变量 | 14 |
|
||||
| internal 方法 | 14 |
|
||||
| internal 函数 | 1 |
|
||||
| **总计** | **180** |
|
||||
|
||||
---
|
||||
|
||||
*检测规则:导出的标识符(首字母大写)必须紧跟以该标识符名称开头的 `//` 文档注释,才被视为已文档化。`_test.go` 和 vendor 目录已排除。*
|
||||
@ -1,48 +0,0 @@
|
||||
## 更新配置文件实例
|
||||
|
||||
ulw 深度分析配置文件,当前支持的配置和 --generate-config 是否有不一样的地方,--generate-config
|
||||
需要完整且详细,包括所有字段的枚举值都要有
|
||||
|
||||
ulw 深度分析下有没有代码实现了,但是 --generate-config 缺失的地方
|
||||
|
||||
ulw 逐行分析下当前的 --generate-config,看看代码中是否都实现了
|
||||
|
||||
ulw 分析 lib/nginx 代码,然后更新 docs/nginx/ 里的文档
|
||||
|
||||
ulw 深度分析下 @docs/ 下的 nginx 文档,看看当前项目实现的怎么样了
|
||||
|
||||
## 单元测试
|
||||
|
||||
ulw 深度分析下当前测试覆盖率
|
||||
|
||||
/ralplan 深度分析一个完善测试的方案
|
||||
|
||||
ulw 分析并完善测试覆盖率,每完成一个功能点提交一次
|
||||
|
||||
## 注释
|
||||
|
||||
ulw 参考 @docs/comments.md,深度分析项目注释是否完善
|
||||
|
||||
## 优化
|
||||
|
||||
ulw 深度分析下,有没有重复的逻辑/代码,或者冗余的东西,或者没用的东西
|
||||
|
||||
ulw 运行 make lint,并修复
|
||||
|
||||
ulw 深度分析下当前项目的性能
|
||||
|
||||
@Makefile 运行性能基准测试
|
||||
|
||||
ulw 完善性能基准测试
|
||||
|
||||
ulw 深度分析下代码质量
|
||||
|
||||
ulw 深度分析下代码架构
|
||||
|
||||
ulw 分析下 lib/fasthttp/ 的源码,然后看下 lolly 的用法合不合理,有没有性能可以提升的地方
|
||||
|
||||
## 兼容性
|
||||
|
||||
ulw @docs/config/ 下有些nginx的配置示例,深度分析下当前 lolly 项目,然后看看 lolly 是否支持实现这些 nginx 的效果
|
||||
|
||||
ulw 查看 @docs/nginx/04-nginx-proxy-loadbalancing.md 分析下 lolly 是否实现了这些功能
|
||||
@ -327,6 +327,9 @@ func GenerateConfigYAML(cfg *Config) ([]byte, error) {
|
||||
buf.WriteString(" # scripts: # Lua 脚本列表\n")
|
||||
buf.WriteString(" # - path: \"/scripts/auth.lua\" # 脚本路径\n")
|
||||
buf.WriteString(" # phase: \"access\" # 执行阶段(有效值: rewrite, access, content, log, header_filter, body_filter)\n")
|
||||
buf.WriteString(" # # 或者使用路由匹配模式(与 phase 互斥)\n")
|
||||
buf.WriteString(" # # route: \"/api/.*\" # 路由匹配路径/模式(设置后按路由匹配执行,而非阶段执行)\n")
|
||||
buf.WriteString(" # # route_type: \"regex\" # 路由匹配类型(有效值: exact, prefix, prefix_priority, regex, regex_caseless;默认 prefix)\n")
|
||||
buf.WriteString(" # timeout: 10s # 执行超时\n")
|
||||
buf.WriteString(" # enabled: true # 是否启用此脚本\n")
|
||||
buf.WriteString(" # global_settings: # 全局设置\n")
|
||||
@ -335,7 +338,7 @@ func GenerateConfigYAML(cfg *Config) ([]byte, error) {
|
||||
fmt.Fprintf(&buf, " # code_cache_size: %d # 字节码缓存条目数\n", cfg.Servers[0].Lua.GlobalSettings.CodeCacheSize)
|
||||
fmt.Fprintf(&buf, " # enable_file_watch: %v # 启用文件变更检测\n", cfg.Servers[0].Lua.GlobalSettings.EnableFileWatch)
|
||||
fmt.Fprintf(&buf, " # max_execution_time: %ds # 最大执行时间\n", int(cfg.Servers[0].Lua.GlobalSettings.MaxExecutionTime.Seconds()))
|
||||
fmt.Fprintf(&buf, " # coroutine_stack_size: %d # 协程栈大小(0=使用默认值)\n", cfg.Servers[0].Lua.GlobalSettings.CoroutineStackSize)
|
||||
fmt.Fprintf(&buf, " # coroutine_stack_size: %d # 协程栈大小(0=使用引擎默认值 64,最大 256)\n", cfg.Servers[0].Lua.GlobalSettings.CoroutineStackSize)
|
||||
fmt.Fprintf(&buf, " # coroutine_pool_warmup: %d # 协程池预热数量(0=不预热)\n", cfg.Servers[0].Lua.GlobalSettings.CoroutinePoolWarmup)
|
||||
fmt.Fprintf(&buf, " # minimize_stack_memory: %v # 最小化栈内存使用\n", cfg.Servers[0].Lua.GlobalSettings.MinimizeStackMemory)
|
||||
fmt.Fprintf(&buf, " # lstate_pool_initial_size: %d # LState池初始大小\n", cfg.Servers[0].Lua.GlobalSettings.LStatePoolInitialSize)
|
||||
@ -401,13 +404,21 @@ func GenerateConfigYAML(cfg *Config) ([]byte, error) {
|
||||
buf.WriteString(" # interval: 10s\n")
|
||||
buf.WriteString(" # path: /health\n")
|
||||
buf.WriteString(" # timeout: 5s\n")
|
||||
buf.WriteString(" # slow_start: 0s # 慢启动时间(0 表示禁用)\n")
|
||||
buf.WriteString(" # match: # 健康检查匹配条件(可选,未配置时仅检查状态码 2xx)\n")
|
||||
buf.WriteString(" # status: [\"200-299\"] # 匹配的状态码范围列表\n")
|
||||
buf.WriteString(" # body: \"ok\" # 响应体正则匹配(可选)\n")
|
||||
buf.WriteString(" # headers: # 响应头匹配(可选)\n")
|
||||
buf.WriteString(" # X-Health: \"ok\"\n")
|
||||
buf.WriteString(" # timeout: # 超时配置\n")
|
||||
buf.WriteString(" # connect: 5s # 连接超时\n")
|
||||
buf.WriteString(" # dial: 5s # TCP 连接建立超时(不含 DNS/TLS)\n")
|
||||
buf.WriteString(" # connect: 5s # 总连接超时(含 DNS/TLS)\n")
|
||||
buf.WriteString(" # read: 30s # 读取超时\n")
|
||||
buf.WriteString(" # write: 30s # 写入超时\n")
|
||||
buf.WriteString(" # buffering: # 代理缓冲配置\n")
|
||||
buf.WriteString(" # mode: \"default\" # 缓冲模式(有效值: default, on, off;off 为流式转发)\n")
|
||||
buf.WriteString(" # buffer_size: 0 # 响应缓冲区大小(字节,0 表示使用默认值)\n")
|
||||
buf.WriteString(" # buffers: \"8 16k\" # 多缓冲区配置(格式: \"数量 大小\",如 \"8 16k\" 或 \"4 4k 8 16k\")\n")
|
||||
buf.WriteString(" # proxy_bind: \"\" # 代理拨号绑定本地地址\n")
|
||||
buf.WriteString(" # internal: false # 仅允许内部重定向访问\n")
|
||||
buf.WriteString(" # headers: # 头部修改\n")
|
||||
|
||||
11
skills-lock.json
Normal file
11
skills-lock.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"version": 1,
|
||||
"skills": {
|
||||
"golang-pro": {
|
||||
"source": "jeffallan/claude-skills",
|
||||
"sourceType": "github",
|
||||
"skillPath": "skills/golang-pro/SKILL.md",
|
||||
"computedHash": "12b4cac8f65228f82cbc26f0da9232aba87ffa45ccd01afa3998fb8ec61dc288"
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user