修改已完成。下面是完整总结:


一、修改了哪些文件,改了什么内容

文件 1:.eide/files.options.yml

作用:armclang 编译器 在编译官方外设库的 .c 文件时,不产生任何警告。

改动:

        files:
            'Firmware/GD32E23x_standard_peripheral/**/*.c':
                - -w
        virtualPathFiles:
            'Peripherals/**/*':
                - -w
  • files 是按实际磁盘路径匹配,对应 Firmware/GD32E23x_standard_peripheral/ 下的所有 .c 源文件。
  • virtualPathFiles 是按 eide 项目视图里的虚拟文件夹匹配,Peripherals 正好就是官方外设库在 eide 里的显示名称。
  • -w = 关闭该文件的全部编译警告。

文件 2:.clangd

作用:clangd 语言服务器(VS Code 里代码下划线、Problems 面板提示)在分析官方外设库文件时,静默所有诊断。

改动: 在原配置末尾追加了两段路径条件配置

---
If:
  PathMatch: Firmware/GD32E23x_standard_peripheral/.*\nCompileFlags:
  Add: [-w]
---
If:
  PathMatch: Firmware/GD32E23x_standard_peripheral/.*\nDiagnostics:
  Suppress: [.*]
  • 第一段:追加编译选项 -w,抑制编译器类型的诊断(如 expanded from macro)。
  • 第二段:Suppress: [.*],抑制 clangd 自身特有的诊断(如 unused-includes-Wshadow-header 等)。
  • PathMatch 确保这两段只对官方外设库生效,你自己写的代码完全不受影响。

二、以后要添加其它官方文件/目录,怎么弄

场景 A:新增一个官方库目录(比如以后用了 Firmware/GD32E23x_usbd_driver

.eide/files.options.yml
files:virtualPathFiles: 里各加一行:

        files:
            'Firmware/GD32E23x_standard_peripheral/**/*.c':
                - -w
            # 新增官方库
            'Firmware/GD32E23x_usbd_driver/**/*.c':
                - -w
        virtualPathFiles:
            'Peripherals/**/*':
                - -w
            # 新增官方库(假设你在 eide 里把它虚拟文件夹命名为 USBD)
            'USBD/**/*':
                - -w

.clangd
把原来的 PathMatch 改成用 | 分隔的多条路径:

---
If:
  PathMatch: Firmware/GD32E23x_standard_peripheral/.*|Firmware/GD32E23x_usbd_driver/.*
CompileFlags:
  Add: [-w]
---
If:
  PathMatch: Firmware/GD32E23x_standard_peripheral/.*|Firmware/GD32E23x_usbd_driver/.*
Diagnostics:
  Suppress: [.*]

场景 B:偷懒一把,直接屏蔽所有 Firmware/Utilities/ 下的官方文件

如果你以后懒得逐个加,可以把匹配范围写宽:

.eide/files.options.yml

        files:
            'Firmware/**/*.c':
                - -w
            'Utilities/**/*.c':
                - -w

.clangd

---
If:
  PathMatch: Firmware/.*|Utilities/.*
CompileFlags:
  Add: [-w]
---
If:
  PathMatch: Firmware/.*|Utilities/.*
Diagnostics:
  Suppress: [.*]

这样 Firmware(包含 CMSIS + 所有外设库)和 Utilities 里的所有官方文件都会被忽略。


三、改完后的生效步骤

  1. 重新编译项目(触发 armclang 读取新的 files.options.yml)。
  2. 重启 clangd:按 Ctrl+Shift+P → 输入 C/C++: Restart IntelliSense for Active File,或者重启 VS Code
    这一步是让 clangd 重新加载 .clangd 配置文件。

做完后,官方外设库相关的报错/警告就会从 Problems 面板和代码编辑器里彻底消失。

对的,-w 只屏蔽警告(Warning),不会屏蔽错误(Error)


四、具体说明

级别 VS Code Severity 是否会被 -w 屏蔽
Error 1 不会,编译照样失败
Warning 2 会屏蔽
Information / Hint 3~4 会屏蔽

你提供的那些诊断:

"severity": 2,   // Warning 级别
"message": "expanded from macro 'GPIO_BOP'"
"code": "-Wunsafe-buffer-usage",  // 带 -W 前缀的就是 Warning
"severity": 4
  • severity: 2 = Warning
  • -Wunsafe-buffer-usage-Wunused-parameter-Wshadow-header = 这些都是 Warning
  • unused-includes = clangd 的提示信息(Hint)

它们都不是 Error。 所以如果官方库真的有语法错误、缺少分号、未定义符号等问题,-w 不会帮你掩盖,编译器照样会报错,编译照样会失败。


一句话总结

错误(Error)照常显示,编译遇到错误照样停;只有烦人的警告(Warning)和提示(Hint)被静默掉。

更多推荐