gpt4 book ai didi

javascript - 为 CodeMirror 编写自定义模式,用于 Brackets

转载 作者:数据小太阳 更新时间:2023-10-29 06:06:38 27 4
gpt4 key购买 nike

我正在尝试为将处理 PowerShell 的 Brackets 编写一个插件/扩展。嗯,查看了一下,发现CodeMirror也没有PowerShell模式,需要自己创建。我过得很糟糕,因为网上几乎没有任何关于我正在尝试做的事情的详细资源。



这是我的 main.js 文件:

    define(function (require, exports, module){
"use strict";


//Load Modules
var LanguageManager = brackets.getModule("language/LanguageManager"),
CodeMirror = brackets.getModule("thirdparty/CodeMirror2/lib/codemirror"),
PowerShellMode = require("powershell.js");


//Define the Language
LanguageManager.defineLanguage("powershell", {
name: "PowerShell",
mode: "powershell",
fileExtensions: ["ps1"],
lineComment: ["\/\/"]
});



function log(s) {
console.log("[PS-DevKit] " +s);
}

log("PowerShell module loaded!");


});



这是我的 powershell.js 文件:

//CodeMirror Example
CodeMirror.defineMode("powershell", function() {

return{
startStat: function() {return {inString: false};},
token: function(stream, state){
//If a string starts here
if (!state.inString && stream.peek() == '"'){
stream.next(); //Skip quote
state.inString = true; //Update state
}

if (state.inString) {

if (stream.skipTo('"')){ //Quote found on this line
stream.next(); //Skip quote
state.inString=false; //Clear flag
} else {
stream.skipToEnd(); //Rest of line is string
}

return "red-text"; //Token style

} else {

stream.skipTo('"') || stream.skipToEnd();
return null; //Unstyled token

}
}
};
});



按原样使用此代码运行 Brackets 时,出现错误(开发人员控制台),它无法从“Program Files(x86)\Brackets\www”加载我的 powershell.js 文件。所以我尝试输入文件所在的确切路径(位于我的用户目录中的 Bracket 扩展文件夹),它有效但我收到以下消息:

Use brackets.getModule("thirdparty/CodeMirror2/lib/codemirror") instead of global CodeMirror.
at Object.defineProperty.get (/brackets.js:115:32)
at file:///C:/Users/MY_USERNAME/AppData/Roaming/Brackets/extensions/user/PS-DevKit/powershell.js:2:1



任何输入?现在,我要做的就是让它加载并将引号中的任何文本更改为红色。即使我收到关于需要使用 CodeMirror 模块的弃用警告,扩展也会加载,如果我创建一个“.ps1”文件,它会识别出它是 PowerShell。

最佳答案

一般答案 - 实际上一些相当详细的资源:

具体答案 - 我可以在您的示例代码中发现一些肯定会导致问题的问题:

  1. 使用 require("powershell") 没有 .js -- 这是 JS 模块加载器期望的格式
  2. powershell.js 应该包含与 main.js 相同的 define(...) 包装器。它应该使用 brackets.getModule() 来获取对 CodeMirror 的引用,与 main.js 相同。 (使用内置于 Brackets 中的 JSLint 有助于在您引用忘记显式加载为模块依赖项的全局变量时向您发出警告)。
  3. 您的 CM 模式有错别字:startStat -> startState
  4. 您需要在调用 LanguageManager.defineLanguage() 之前调用 CodeMirror.defineMode() - 请参阅上面链接的“自定义 CodeMirror 模式”文档。您可以在 powershell.js 模块中或在 main.js 的早期执行此操作。

关于javascript - 为 CodeMirror 编写自定义模式,用于 Brackets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24433552/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com