You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSCode中Modern Fortran+fortls无法识别PETSc关键字求助

解决fortls无法识别PETSc Fortran类型/关键字的问题

针对你遇到的VSCode中Modern Fortran插件搭配fortls无法识别PETSc类型(如SNES、KSP)的问题,可以从以下几个方向排查解决:

1. 修正.fortls路径配置

你的当前配置存在重复路径、通配符过度使用的问题,fortls对路径的递归扫描不需要**通配符,直接指定目录即可。以下是调整后的配置示例:

{
  "source_dirs": [
    "./",
    "./src",
    "/Users/apple/local/petsc/src/vec/f90-mod",
    "/Users/apple/local/petsc/src/ksp/f90-mod",
    "/Users/apple/local/petsc/src/dm/f90-mod",
    "/Users/apple/local/petsc/src/mat/f90-mod",
    "/Users/apple/local/petsc/src/snes/f90-mod",
    "/Users/apple/local/petsc/src/sys/f90-mod"
  ],
  "include_dirs": [
    "./include",
    "/Users/apple/local/petsc/include",
    "/Users/apple/local/petsc/include/petsc/finclude",
    "/Users/apple/local/petsc/osx-gfc/include"
  ],
  "ext_source_dirs": [
    "/Users/apple/local/petsc/src/snes/f90-mod",
    "/Users/apple/local/petsc/src/sys/f90-mod",
    "/Users/apple/local/petsc/src/vec/f90-mod",
    "/Users/apple/local/petsc/src/dm/f90-mod",
    "/Users/apple/local/petsc/src/mat/f90-mod",
    "/Users/apple/local/petsc/src/ksp/f90-mod"
  ],
  "hover_language": "fortran90",
  "hover_signature": true,
  "use_signature_help": true,
  "lowercase_intrinsics": false,
  "incremental_sync": true
}
  • source_dirs:指定你的源码目录和PETSc的Fortran模块源文件目录(这些目录包含定义SNES、KSP等类型的.f90源文件)
  • include_dirs:指定PETSc的预处理头文件目录(如finclude下的.h90文件)

2. 代码中显式引用PETSc模块

PETSc的类型并非全局可见,必须在代码中显式use对应的子模块才能让fortls识别:

! 在代码开头添加对应模块引用
use petscsnes  ! 识别SNES类型及相关函数
use petscksp   ! 识别KSP类型及相关函数
use petscvec   ! 识别Vec类型及相关函数
use petscmat   ! 识别Mat类型及相关函数

3. 验证PETSc的Fortran支持

  • 运行petsc-config --has-fortran命令,确认返回yes,说明PETSc编译时已启用Fortran支持
  • 确保VSCode能读取到PETSC_DIR和PETSC_ARCH环境变量:在VSCode终端中执行以下命令,再重启VSCode
    export PETSC_DIR=/Users/apple/local/petsc
    export PETSC_ARCH=osx-gfc
    

4. 更新工具版本

  • 升级fortls到最新版:
    pip install --upgrade fortls
    
  • 在VSCode扩展市场中更新Modern Fortran插件到最新版本,旧版本可能存在模块解析兼容性问题

5. 重启语言服务

在VSCode中按下Cmd+Shift+P(Mac)或Ctrl+Shift+P(Windows/Linux),输入Modern Fortran: Restart Language Server,重启服务让新配置生效。

内容的提问来源于stack exchange,提问作者DpD_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 01:05:20