语言服务器遵循 语言服务器协议, 并与 Snyk 开源、Snyk 基础设施即代码和 Snyk 代码集成。对于前两者,它使用 Snyk CLI 作为数据提供者,对于后者,它直接连接到 Snyk 代码 API。
目前,语言服务器支持以下操作:
$/进度
$/取消请求
文档发布诊断
types.PublishDiagnosticsParams{
"uri": "file:///path/to/file",
"diagnostics": [
{
"range": {
"start": { "line": 1, "character": 0 },
"end": { "line": 2, "character": 0 },
},
"severity": 1,
"code": "S100",
"source": "Snyk",
"message": "消息",
"tags": ["安全"],
"data": {
"id": "123",
"issueType": "漏洞",
"packageName": "包名",
"packageVersion": "包版本",
"issue": "问题",
"additionalData": {
"ruleId": "规则ID",
"identifiers": {
"cwe": ["cwe"],
"cve": ["cve"]
},
"description": "描述",
"language": "语言",
"packageManager": "包管理器",
"packageName": "包名"
}
}
}
]
}
{
"uri": "file:///path/to/file",
"diagnostics": [
{
"range": {
"start": { "line": 1, "character": 0 },
"end": { "line": 2, "character": 0 },
},
"severity": 1,
"code": "S100",
"source": "Snyk",
"message": "消息",
"tags": ["安全"],
"data": {
"id": "123",
"filePath": "文件路径",
"range": {
"start": { "line": 1, "character": 0 },
"end": { "line": 2, "character": 0 },
},
"additionalData": {
"message": "消息",
"rule": "规则",
"ruleId": "规则ID",
"dataFlow": [
{
"filePath": "文件路径",
"range": {
"start": { "line": 1, "character": 0 },
"end": { "line": 2, "character": 0 },
},
}
],
"cwe": "cwe",
"isSecurityType": true
}
}
}
]
}
窗口日志消息
窗口显示消息
SDK 回调以从客户端检索配置的 SDK
workspace/snyk.sdkstypes.WorkspaceFolder[{
"type": "java", // 或 python 或 go
"path": "/path/to/sdk" // JAVA_HOME 对于 java,GOROOT 对于 Go,Python 可执行文件对于 Python
}]
文件夹配置通知
$/snyk.folderConfigstypes.FolderConfigsParam{
"folderConfigs":
[
{
"folderPath": "the/folder/path",
"baseBranch": "the-base-branch", // 例如 main
"localBranches": [ "branch1", "branch2" ],
"preferredOrg": "org-id", // 操作此文件夹时使用的组织。
"orgMigratedFromGlobalConfig": true, // 由语言服务器设置以跟踪升级过程中的迁移。
"orgSetByUser": true // 如果为假,则语言服务器自动确定组织。
}
]
}
自定义发布诊断通知
$/snyk.publishDiagnostics316types.PublishDiagnosticsParamstextDocument/publishDiagnostics 的别名MCP 服务器 URL 通知以发布监听地址。服务器在 /messages 上监听 POST 请求,并在 /sse 上订阅 SSE。可以在 mcp 包的烟雾测试中找到一个示例。
$/snyk.mcpServerURLtypes.McpServerURLParams{
"url": "https://127.0.0.1:7595"
}
身份验证通知
$/snyk.hasAuthenticatedtypes.AuthenticationParams{
"token": "the snyk token", // 这可以是一个 oauth2.Token 字符串或旧版令牌
"apiUrl": "https://api.snyk.io"
}
CLI 路径通知
$/snyk.isAvailableClitypes.SnykIsAvailableCli{
"cliPath": "/a/path/to/cli-executable"
}
可信文件夹通知
$/snyk.addTrustedFolderstypes.SnykTrustedFoldersParams{
"trustedFolders": ["/a/path/to/trust"]
}
扫描通知
$/snyk.scantypes.ScanParams{
"status": "success", // 可能的值:"error", "inProgress", "success"
"product": "code", // 可能的值:"code", "oss", "iac"
"folderPath": "/a/path/to/folder",
}
{
"status": "error",
"product": "code",
"folderPath": "/a/path/to/folder",
"presentableError": {
"cliError": {
"code": "CLI_ERROR_CODE",
"error": "发生了一个错误"
},
"showNotification": true,
"treeNodeSuffixError": "(失败)"
}
}
汇总面板状态通知
$/snyk.scanSummarytypes.ScanSummary{
"scanSummary": "<html><body<p> 汇总 </p></body></html>"
}
NavigateToRangeCommand 导航客户端到给定的范围
snyk.navigateToRangepath, RangeWorkspaceScanCommand 触发所有工作区文件夹的扫描
snyk.workspace.scanWorkspaceFolderScanCommand 触发给定工作区文件夹的扫描
snyk.workspaceFolder.scanpathOpenBrowserCommand 在默认浏览器中打开给定的 URL
snyk.openBrowserURLLoginCommand 触发登录过程
snyk.loginCopyAuthLinkCommand 将身份验证 URL 复制到剪贴板
snyk.copyAuthLinkLogoutCommand 触发注销过程
snyk.logoutTrustWorkspaceFoldersCommand 检查可信的工作区文件夹并在必要时请求信任
snyk.trustWorkspaceFoldersOpenLearnLesson 在 Snyk 学习网站上打开给定的课程
snyk.openLearnLessonrule stringecosystem stringcwes string(逗号分隔),例如 CWE-79,CWE-89cves string(逗号分隔),例如 CVE-2018-11776,CVE-2018-11784issueType intPackageHealth 类型 = 0
CodeSecurityVulnerability = 1
LicenseIssue = 2
DependencyVulnerability = 3
InfrastructureIssue = 4
GetLearnSession 返回 Snyk 学习网站上的给定课程
snyk.getLearnLessonrule stringecosystem stringcwes string(逗号分隔),例如 CWE-79,CWE-89cves string(逗号分隔),例如 CVE-2018-11776,CVE-2018-11784issueType intPackageHealth 类型 = 0
CodeSecurityVulnerability = 1
LicenseIssue = 2
DependencyVulnerability = 3
InfrastructureIssue = 4
{
"lessonId": "123",
"datePublished": "2022-01-01",
"author": "John Doe",
"title": "Golang 入门",
"subtitle": "Golang 初学者指南",
"seoKeywords": ["Golang", "编程", "初学者"],
"seoTitle": "学习 Golang",
"cves": ["CVE-2022-1234", "CVE-2022-5678"],
"cwes": ["CWE-123", "CWE-456"],
"description": "本课程为初学者提供了 Golang 的入门介绍",
"ecosystem": "编程",
"rules": ["规则 1", "规则 2", "规则 3"],
"slug": "golang-intro",
"published": true,
"url": "https://example.com/golang-intro",
"source": "Example.com",
"img": "https://example.com/images/golang-intro.png"
}
SettingsSastEnabled 触发 API 调用以检查 Snyk 代码是否启用
snyk.getSettingsSastEnabled*sast_contract.SastResponse 或者如果发生错误则返回错误和假。GetActiveUser 触发 API 调用以获取当前登录用户或未登录时的错误
snyk.getActiveUser{
"id": "123",
"username": "johndoe",
"orgs": [
{
"name": "org1",
"id": "org1_id",
"group": {
"name": "group1",
"id": "group1_id"
}
}
],
}
Code Fix Command 触发自动修复并应用第一个建议的更改
snyk.code.fixcodeActionId stringAffectedFilePath stringrange RangeCode Fix Diffs 允许检索自动修复建议的差异
snyk.code.fixDiffs[{
"fixId": "123",
"unifiedDiffsPerFile": {
"path/to/file": "diff"
}
}]
--- /var/folders/vn/77lwfy3974g7vykcm5lr6mkh0000gn/T/Test_SmokeWorkspaceScanOssAndCode952013010/001/1
+++ /var/folders/vn/77lwfy3974g7vykcm5lr6mkh0000gn/T/Test_SmokeWorkspaceScanOssAndCode952013010/001/1-fixed
@@ -32,7 +32,8 @@
test('应设置成功为 OK', function() {
// 给定
- comp.password = comp.confirmPassword = 'myPassword';
+ comp.password = process.env.TEST_PASSWORD;
+ comp.confirmPassword = process.env.TEST_PASSWORD;
// 当
comp.changePassword();
Code Fix Apply Edit Command 触发自动修复并应用第一个建议的更改
snyk.code.fixApplyEditfixId stringFeature Flag Status Command 触发 API 调用以检查功能标志是否启用
snyk.getFeatureFlagStatusfeatureFlagType string {
"ok": true, // 布尔值表示功能是否启用(真或假)
"userMessage": "可选用户消息" // 如果 'ok' 为假,则存在
}
Clear Cache 清除持久或内存缓存或两者。
snyk.clearCachefolderUri string,cacheType 持久 或 内存Generate Issue Description 生成 HTML 格式的问题描述。
snyk.generateIssueDescriptionissueId string发布流程存储生成的可执行文件,以便可以从 这里 下载。只需选择您想要构建工件的发布版本并下载与之关联的 zip 文件。目前,为 Windows、macOS 和 Linux 生成可执行文件。