基于JSON创建Codesys API半自定义VS Code语言扩展的疑问
关于CoDeSys IronPython脚本API的VS Code扩展开发问题
背景
我需要用IronPython脚本调用CoDeSys的API,自动化IDE中的大量手动操作,但官方API文档难以理解,因此希望开发一个能交互式浏览类库的编辑器。目前已完成以下步骤:
- 找到脚本可将所有可用类和函数导出为
api.json文件 - 通过Yeoman创建了VS Code语言模板
但后续遇到两个关键问题:
- 将
api.json放入syntaxes文件夹并修改package.json指向该文件后出现报错,不清楚grammar.scope字段的正确填写方式 - 不了解实现IntelliSense功能所需的JSON数据格式
api.json文件约272000行,结构包含Metadata、Entrypoints、Types等核心节点。
API导出脚本示例
# 将API导出为Python可用的JSON格式 import clr from System.IO import Path path = Path.Combine(Path.GetDirectoryName(__file__), "api.json") print("正在导出到 " + path) system.dump_scripting_api(path) system.exit(0)
Types节点示例
{ "Id": "Member Void write_message(_3S.CoDeSys.Core.Messages.Severity, System.String, _3S.CoDeSys.ScriptEngine.BasicFunctionality.IScriptTreeObject, Int64, Int16) of Type _3S.CoDeSys.ScriptDriverSystem.SystemImpl, ScriptDriverSystem.plugin, Version=3.5.16.30, Culture=neutral, PublicKeyToken=null", "Attributes": "PrivateScope, Public, Final, Virtual, HideBySig, VtableLayoutMask", "Parameters": [ { "Id": "Parameter _3S.CoDeSys.Core.Messages.Severity severity of Member Void write_message(_3S.CoDeSys.Core.Messages.Severity, System.String, _3S.CoDeSys.ScriptEngine.BasicFunctionality.IScriptTreeObject, Int64, Int16) of Type _3S.CoDeSys.ScriptDriverSystem.SystemImpl, ScriptDriverSystem.plugin, Version=3.5.16.30, Culture=neutral, PublicKeyToken=null", "Name": "severity", "Type": "_3S.CoDeSys.Core.Messages.Severity, MessageStorage, Version=3.5.16.0, Culture=neutral, PublicKeyToken=null" }, { "Id": "Parameter System.String stMessage of Member Void write_message(_3S.CoDeSys.Core.Messages.Severity, System.String, _3S.CoDeSys.ScriptEngine.BasicFunctionality.IScriptTreeObject, Int64, Int16) of Type _3S.CoDeSys.ScriptDriverSystem.SystemImpl, ScriptDriverSystem.plugin, Version=3.5.16.30, Culture=neutral, PublicKeyToken=null", "Name": "stMessage", "Type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" }, { "Id": "Parameter _3S.CoDeSys.ScriptEngine.BasicFunctionality.IScriptTreeObject obj of Member Void write_message(_3S.CoDeSys.Core.Messages.Severity, System.String, _3S.CoDeSys.ScriptEngine.BasicFunctionality.IScriptTreeObject, Int64, Int16) of Type _3S.CoDeSys.ScriptDriverSystem.SystemImpl, ScriptDriverSystem.plugin, Version=3.5.16.30, Culture=neutral, PublicKeyToken=null", "Name": "obj", "Type": "_3S.CoDeSys.ScriptEngine.BasicFunctionality.IScriptTreeObject, ScriptEngine2, Version=3.5.16.1, Culture=neutral, PublicKeyToken=null" }, { "Id": "Parameter Int64 position of Member Void write_message(_3S.CoDeSys.Core.Messages.Severity, System.String, _3S.CoDeSys.ScriptEngine.BasicFunctionality.IScriptTreeObject, Int64, Int16) of Type _3S.CoDeSys.ScriptDriverSystem.SystemImpl, ScriptDriverSystem.plugin, Version=3.5.16.30, Culture=neutral, PublicKeyToken=null", "Name": "position", "Type": "System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" }, { "Id": "Parameter Int16 length of Member Void write_message(_3S.CoDeSys.Core.Messages.Severity, System.String, _3S.CoDeSys.ScriptEngine.BasicFunctionality.IScriptTreeObject, Int64, Int16) of Type _3S.CoDeSys.ScriptDriverSystem.SystemImpl, ScriptDriverSystem.plugin, Version=3.5.16.30, Culture=neutral, PublicKeyToken=null", "Name": "length", "Type": "System.Int16, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" } ], "ReturnValue": null, "Name": "write_message", "MemberType": "Method", "Type": "System.Void, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" }
内容的提问来源于stack exchange,提问作者Gene Parmesan
相关产品推荐
相关产品推荐

