Skip to main content

· 阅读需要 1 分钟

KCL 是一个 CNCF 基金会托管的基于约束的记录及函数语言,期望通过成熟的编程语言技术和实践来改进对大量繁杂配置比如云原生 Kubernetes 配置场景的编写,致力于构建围绕配置的更好的模块化、扩展性和稳定性,更简单的逻辑编写,以及更简单的自动化和生态工具集成。

本栏目将会双周更新 KCL 语言社区最新动态,包括功能、官网更新和最新的社区动态等,帮助大家更好地了解 KCL 社区!

KCL 官网:https://kcl-lang.io

特别鸣谢

感谢过去两周所有的社区参与者,以下排名不分先后

  • 恭喜 @AkashKumar7902 完成 LFX 1 期任务,kpm 版本管理模块的 mvp 版本成功合并入 main 分支 🙌
  • 感谢 @shashank-iitbhu 在 IDE Quick Fix 功能上做的持续贡献 🙌
  • 感谢 @Wck-iipi 在 IDE 悬停功能上做的持续贡献 🙌
  • 感谢 @warjiang 为 devcontainer 作出的贡献 🙌
  • 感谢 @shruti2522 为 IDE 悬停效果的优化作出的持续贡献 🙌
  • 感谢 @XiaoK29 为 KCL go SDK 的代码优化作出的持续贡献 🙌
  • 感谢 @d4v1d03 为 KCL 文档作出的持续贡献 🙌
  • 感谢 @officialasishkumar 在包管理工具三方依赖重命名功能的贡献 🙌
  • 感谢 @Vishalk91-4, @Daksh-10 对 KCL tree sitter 语法和解析器生成器的贡献 🙌
  • 感谢 @SamirMarin 对 Crossplane KCL 函数的贡献 🙌
  • 感谢 @officialasishkumar, @d4v1d03, @karlhepler, @Hai Wu, @ron18219, @olinux, @Alexander Fuchs, @Emmanuel Alap, @excalq, @leon-andria, @taylormonacelli, @dennybaa, @zhuxw, @aleeriz, @steeling, @Stéphane Este-Gracias 等在近段时间使用 KCL 过程中提供的宝贵建议与反馈 🙌

内容概述

感谢所有贡献者过去一段时间 (2024.05.15 - 2024.05.29) 的杰出工作,以下是重点内容概述

📦️ 三方库更新

  • 新增 difflib 三方库,支持比较配置差异。

通过 kcl mod add difflib 添加 difflib 依赖。

通过 difflib 三方库提供的 diff 方法,输出配置差异。

import difflib
import yaml

data1 = {
"Name": "John",
"age": 30,
}
data2 = {
"Name": "John",
"age": 20,
}
diff = difflib.diff(yaml.encode(data1), yaml.encode(data2))

然后,对应配置的 diff 如下:

data1:
Name: John
age: 30
data2:
Name: John
age: 20
diff: |2
Name: John
+ age: 20
- age: 30

🏄 语言更新

  • kcl 0.9.0-beta.1 新版本发布。
  • 强化了 schema 结构中属性非空的检查过程,优化了在空属性导致的 check 语句失效时的诊断信息。
  • 修复了 doc parse 将字符串字面值解析成 doc 的问题。
  • 修复了编译过程中 resolver 节点类型丢失的问题。
  • 新增语法错误类型以支持 IDE 语法错误的快速恢复。
  • 修复了 KCL 运行时内存泄漏的问题。

💻 IDE 更新

  • IDE 增加对于部分编译错误的快速恢复。
  • 新增了部分语法 IDE 悬停高亮。

IDE 支持部分语法悬停高亮。

hoverstrlit

  • Devcontainer 配置新增 vscode 扩展。
  • IDE 新增 config 表达式悬停提示对应 schema 字段。
  • IDE 支持通过 kcl.mod 文件识别编译单元。
  • IDE 修复了文档悬停格式错误。
  • IDE 修复了由于 LSP 的 panic 导致的编译错误。
  • 优化了 LSP 输入的日志内容。

📬️ 工具链更新

  • KCL 测试工具支持 fast eval 模式。
  • 新增 kcl clean 支持清理 module 缓存。
  • KCL Import 工具修复 YAML Stream 格式导入过程非预期的错误

包管理工具更新

  • kcl 支持通过 mod add --rename 参数和 kcl.mod 文件中重命名依赖防止名称冲突。
  • 修复了添加本地文件目录作为依赖时,kcl.mod 文件依赖丢失的问题。
  • 支持通过分支名称添加 git 三方库。
  • 移除了在更新依赖时输出的无效日志。
  • 新增 API 支持写入 kcl.mod 和 kcl.mod.lock 文件。
  • 移除了加载三方库过程中请求 metadata 过程。
  • 在打包和上传 KCL 三方库时,针对 KCL 包中存在本地依赖的情况,输出诊断信息。
  • LFX 1 期题目完成,版本管理模块 mvp 版本合并入 main 分支。
  • 支持 kcl.mod 文件中通过 include 和 exclude 字段指定需要打包和跳过的文件。
  • 移除本地计算三方库 checksum 过程。

⛵️ API 更新

  • 新增 UpdateDependencies API 支持更新 KCL 三方库。
  • 新增 API 支持写入 kcl.mod 和 kcl.mod.lock 文件。
  • OverrideFile API 返回值中新增编译错误信息。
  • OverrideFile API 支持通过运算符 ":" 和 "+=" 插入配置。
  • ListVariable API 返回值支持解析 List 和 Dict 结构。
  • 修复了 OverrideFile API 在插入 import 语句时导致的配置格式错乱的问题。
  • 重构了获取 schema type 相关的 API。
  • 修复了 LSP handle_semantic_tokens_full 和 handle_document_symbol 方法导致的 panic 问题。

🔥 SDK 更新

  • KCL SDK v0.9.0-beta.1 版本发布, 同步支持 API 更新。
  • KCL Go SDK 支持通过 Protobuf 导入 KCL Schema。

📂 文档更新

  • 修复了开发向导文档中的错误拼写与一些环境配置描述。
  • 新增关于 file.read_env 库函数的文档说明。
  • 语言文档中补充了关于 schema 属性名称中“-”,“.”等符号的说明。
  • 新增了一些 Q&A。

📺 生态集成

  • Crossplane kcl function 发布 v0.9.0 版本,修复内存泄漏,arm64 镜像错误问题,同时支持在函数层面设置外部包依赖和编译参数。
  • KCL tree sitter 新增 schema, mixin, rule 等语法支持和对应测试。

其他资源

❤️ 查看 KCL 社区 加入我们。

更多其他资源请参考:

· 阅读需要 1 分钟

KCL 是一个 CNCF 基金会托管的基于约束的记录及函数语言,期望通过成熟的编程语言技术和实践来改进对大量繁杂配置比如云原生 Kubernetes 配置场景的编写,致力于构建围绕配置的更好的模块化、扩展性和稳定性,更简单的逻辑编写,以及更简单的自动化和生态工具集成。

本栏目将会双周更新 KCL 语言社区最新动态,包括功能、官网更新和最新的社区动态等,帮助大家更好地了解 KCL 社区!

KCL 官网:https://kcl-lang.io

内容概述

感谢所有贡献者过去一段时间 (2024.05.01 - 2024.05.15) 的杰出工作,以下是重点内容概述

📦️ 三方库更新

  • argo-cd-order 更新到 0.2.0 版本,新增资源过滤功能
  • crossplane 模块 KCL 代码更新,与 crossplane 1.15 版本 CRD Webhook 校验规则匹配
  • json-merge-patch 模块更新到 0.1.1 版本,支持 Schema 类型过滤

🏄 语言更新

  • 修复 yaml.decode_all 函数返回值的类型错误
  • 修复 as 关键字在某些三方库存在会断言失败的情况
  • file 模块函数列表更新,详见文档
  • typeof 函数新增 Schema 类型的支持用于区分 schema 类型和实例
schema Foo:
bar?: str

foo = Foo {}
type_schema = typeof(foo) # schema
type_type = typeof(Foo) # type

💻 IDE 更新

  • 修复 IDE 在 Windows 操作系统上路径错误以及偶发崩溃的问题
  • Intellij KCL 插件根据功能不同拆分为带/不带 kcl-language-server 两种版本

📬️ 工具链更新

  • 修复 kcl run 编译相对路径模块时找不到三方库的问题
  • 修复 kcl vet 验证工具不能导入外部库的问题
  • 修复 kcl fmt 格式化工具在插入外部 import 语句时的格式化错误问题
  • 修复 kcl completion bash 命令补全非预期的错误

⛵️ API 更新

  • OverrideFile API 优化变量自动修改时的格式输出
  • ListVariables API 支持变量属性运算符类型和 Schema 类型返回
  • GetSchemaType API 支持 Schema 父类返回

🔥 SDK 更新

  • KCL Rust SDK 发布 v0.9.0-alpha.1 预览版本
  • KCL Python SDK 发布 v0.9.0-alpha.1 预览版本
  • KCL Node.js SDK 发布 v0.9.0-alpha.1 预览版本
  • KCL Java SDK 发布 v0.9.0-SNAPSHOT 版本

🚪 集成更新

  • 修复 ArgoCD KCL Plugin 并发同步资源报错的问题
  • 新增 KCL arm64 docker 镜像 kcllang/kcl-arm64
  • KRM KCL 规范新增权限访问字段、Kubernetes 资源过滤字段和编译配置字段,支持私有 OCI Registry 访问以及灵活的编译配置,详见文档
  • Crossplane KCL 函数发布 v0.8.0 版本并更新更多使用样例,详见文档

特别鸣谢

感谢过去两周所有的社区参与者,以下排名不分先后

  • 感谢 @Blarc 和 @prahaladramji 对 KCL Intellij IDE 插件支持最新 Intellij 版本的贡献 🙌
  • 感谢 @jgascon-nx 对 KCL Crossplane 模块的贡献 🙌
  • 感谢 @Gmin2 对 KCL VS Code IDE 重启 KCL Language Server 命令的贡献 🙌
  • 感谢 @Gmin2 对 KCL GetSchemaType API 支持返回父类字段的贡献 🙌
  • 感谢 @metacoma 对 KCL argo-cd-order 模块的贡献 🙌
  • 感谢 @shruti2522 对 KCL file 模块的贡献 🙌
  • 感谢 @shruti2522 对 KCL Import 和 Doc 工具的贡献 🙌
  • 感谢 @shruti2522 对 KRM KCL 规范 Kubernetes 资源过滤功能的贡献 🙌
  • 感谢 @JeevaRamanathan 对 KCL file 模块的贡献 🙌
  • 感谢 @AkashKumar7902 对 KCL 包管理工具 MVS 最小版本选择算法的贡献 🙌
  • 感谢 @bozaro 对 KCL Go SDK Native API 的贡献 🙌
  • 感谢 @officialasishkumar 对 KCL 包管理工具配置支持 exclude 参数和 include 参数的贡献 🙌
  • 感谢 @beholdenkey 对 KCL 文档的贡献 🙌
  • 感谢 @d4v1d03 对 KCL IDE 悬停功能的贡献 🙌
  • 感谢 @ibishal 对 KCL IDE Preview 功能的贡献 🙌
  • 感谢 @bradkwadsworth-mw 对 KRM KCL 规范中访问权限字段以及的贡献 🙌
  • 感谢 @jgascon-nx 和 @metacoma 对使用 KCL 和 Crossplane KCL 函数的经验和案例分享, 查看代码仓库 🙌
  • 感谢 @mintu, @Sergei Iakovlev, @HAkash Kumar, @HStéphane Este-Gracias, @Korada Vishal, @Bishal, @metacoma, @NAVRockClimber, @nkabir, @dennybaa, @dopesickjam, @vfarcic, @sestegra, @jgascon-nx, @zargor, @markphillips100, @evensolberg, @borgius, @bradkwadsworth-mw, @reedjosh, @patrycju, @PrettySolution, @selfuryon, @steeling, @empath-nirvana, @CC007, @M Slane, @MOHAMED FAWAS 和 @Even Solberg 等在近段时间使用 KCL 过程中提供的宝贵建议与反馈 🙌

其他资源

❤️ 查看 KCL 社区 加入我们。

更多其他资源请参考: