Visual studio code 签名帮助提供程序在自定义扩展中工作不正确

Visual studio code 签名帮助提供程序在自定义扩展中工作不正确,visual-studio-code,vscode-extensions,Visual Studio Code,Vscode Extensions,不久前,我们已经在VS代码中为内部编程语言编写了自定义扩展。我们使用内置PHP扩展作为起点。直到有一刻(不确定到底是哪一刻)它还工作得很好。签名帮助提供程序突出显示随机参数。然而,在我们的代码中,参数索引是正确的。我不知道出了什么问题以及SignatureHelp类是如何工作的 以下是其行为的屏幕截图: 下面是SignatureHelp的代码(它大部分是未触及的旧内置PHP代码。变量activeP包含正确的索引,其SignatureHelp类出错): “严格使用”; var vscode_1=

不久前,我们已经在VS代码中为内部编程语言编写了自定义扩展。我们使用内置PHP扩展作为起点。直到有一刻(不确定到底是哪一刻)它还工作得很好。签名帮助提供程序突出显示随机参数。然而,在我们的代码中,参数索引是正确的。我不知道出了什么问题以及SignatureHelp类是如何工作的

以下是其行为的屏幕截图:

下面是SignatureHelp的代码(它大部分是未触及的旧内置PHP代码。变量activeP包含正确的索引,其SignatureHelp类出错):

“严格使用”;
var vscode_1=要求(“vscode”);
var myLangGlobals=require(“./myLangGlobals”);
var markedTextUtil_1=require(“./utils/markedTextUtil”);
var _NL='\n'.charCodeAt(0);
var_TAB='\t'.charCodeAt(0);
var_WSB=''.charCodeAt(0);
var _LBracket='['.charCodeAt(0);
var _RBracket=']'.charCodeAt(0);
var_LCurly='{'.charCodeAt(0);
var _RCurly='}'.charCodeAt(0);
var _LParent='('.charCodeAt(0);
var _RParent=')'.charCodeAt(0);
变量_逗号=','.charCodeAt(0);
var _Quote='\''.charCodeAt(0);
var _DQuote='''''.charCodeAt(0);
var _USC=''.charCodeAt(0);
变量a='a'.charCodeAt(0);
var_z='z'.charCodeAt(0);
变量A='A'.charCodeAt(0);
var_Z='Z'.charCodeAt(0);
var_0='0'。charCodeAt(0);
var_9='9'.charCodeAt(0);
var-BOF=0;
var backarditerator=(函数(){
功能反向计数器(型号、偏移量、行号){
this.lineNumber=行号;
这个偏移量=偏移量;
this.line=model.lineAt(this.lineNumber).text;
this.model=模型;
}
backarditerator.prototype.hasNext=函数(){
返回此值。行号>=0;
};
backarditerator.prototype.next=函数(){
如果(此偏移小于0){
如果(this.lineNumber>0){
此.lineNumber--;
this.line=this.model.lineAt(this.lineNumber).text;
this.offset=this.line.length-1;
返回(NL);
}
此参数为.lineNumber=-1;
返回转炉;
}
var ch=this.line.charCodeAt(this.offset);
这是一种补偿;
返回ch;
};
回流式逆流干燥器;
}());
var myLangSignatureHelpProvider=(函数(){
函数myLangSignatureHelpProvider(){
}
myLangSignatureHelpProvider.prototype.ProviderDesignatureHelp=功能(文档、职位、令牌){
var enable=vscode_1.workspace.getConfiguration('myLang').get('suggest.basic',true);
如果(!启用){
返回null;
}
var迭代器=新的后向迭代器(文档,position.character-1,position.line);
var paramIndex=this.readArguments(迭代器);
如果(参数索引<0){
返回null;
}
var ident=this.readIdent(迭代器);
如果(!ident){
返回null;
}
ident=ident.toLowerCase();
var entry=myLangGlobals.globalfunctions[ident];
如果(!输入){
返回null;
}
var签名=entry.name;
var args=entry.args;
var argCnt=args?args.length:0;
if(entry.type){
签名=entry.type+“”+签名;
}
如果(args){
签名+='(';
for(设i=0;i'use strict';
var vscode_1 = require("vscode");
var myLangGlobals = require("./myLangGlobals");
var markedTextUtil_1 = require("./utils/markedTextUtil");
var _NL = '\n'.charCodeAt(0);
var _TAB = '\t'.charCodeAt(0);
var _WSB = ' '.charCodeAt(0);
var _LBracket = '['.charCodeAt(0);
var _RBracket = ']'.charCodeAt(0);
var _LCurly = '{'.charCodeAt(0);
var _RCurly = '}'.charCodeAt(0);
var _LParent = '('.charCodeAt(0);
var _RParent = ')'.charCodeAt(0);
var _Comma = ','.charCodeAt(0);
var _Quote = '\''.charCodeAt(0);
var _DQuote = '"'.charCodeAt(0);
var _USC = '_'.charCodeAt(0);
var _a = 'a'.charCodeAt(0);
var _z = 'z'.charCodeAt(0);
var _A = 'A'.charCodeAt(0);
var _Z = 'Z'.charCodeAt(0);
var _0 = '0'.charCodeAt(0);
var _9 = '9'.charCodeAt(0);
var BOF = 0;
var BackwardIterator = (function () {
    function BackwardIterator(model, offset, lineNumber) {
        this.lineNumber = lineNumber;
        this.offset = offset;
        this.line = model.lineAt(this.lineNumber).text;
        this.model = model;
    }
    BackwardIterator.prototype.hasNext = function () {
        return this.lineNumber >= 0;
    };
    BackwardIterator.prototype.next = function () {
        if (this.offset < 0) {
            if (this.lineNumber > 0) {
                this.lineNumber--;
                this.line = this.model.lineAt(this.lineNumber).text;
                this.offset = this.line.length - 1;
                return _NL;
            }
            this.lineNumber = -1;
            return BOF;
        }
        var ch = this.line.charCodeAt(this.offset);
        this.offset--;
        return ch;
    };
    return BackwardIterator;
}());
var myLangSignatureHelpProvider = (function () {
    function myLangSignatureHelpProvider() {
    }
    myLangSignatureHelpProvider.prototype.provideSignatureHelp = function (document, position, token) {
        var enable = vscode_1.workspace.getConfiguration('myLang').get('suggest.basic', true);
        if (!enable) {
            return null;
        }
        var iterator = new BackwardIterator(document, position.character - 1, position.line);
        var paramIndex = this.readArguments(iterator);
        if (paramIndex < 0) {
            return null;
        }
        var ident = this.readIdent(iterator);
        if (!ident) {
            return null;
        }
        ident = ident.toLowerCase();


        var entry = myLangGlobals.globalfunctions[ident];
        if (!entry) {
            return null;
        }
        var signature = entry.name;
        var args = entry.args;
        var argCnt = args ? args.length : 0;
        if (entry.type) {
          signature = entry.type + ' ' + signature;
        }
        if (args) {
          signature += '(';
          for (let i = 0; i < argCnt; ++i) {
            if (i) {
              signature += ', ';
            }
            signature += args[i].name;
          }
          signature += ');';
        }
        var activeP = Math.min(paramIndex, Math.max(argCnt - 1, 0));

        var signatureInfo = new vscode_1.SignatureInformation(
          signature,
          new vscode_1.MarkdownString(
            entry.description + '\n\n---\n\n' +
            markedTextUtil_1.textToMarkedString('Version: ' + entry.version) + '\n\n' +
            markedTextUtil_1.textToMarkedString('Documented on: ' + entry.date)
          )
        );
        if (args) {
          for (let i = 0; i < argCnt; ++i) {
            signatureInfo.parameters.push({ label: args[i].name, documentation: args[i].description });
          }
        }
        // TODO: understand, why it highlights incorrect parameter, activeP is correct
        var ret = new vscode_1.SignatureHelp();
        ret.signatures.push(signatureInfo);
        ret.activeSignature = 0;
        ret.activeParameter = activeP;
        return Promise.resolve(ret);
    };
    myLangSignatureHelpProvider.prototype.readArguments = function (iterator) {
        var parentNesting = 0;
        var bracketNesting = 0;
        var curlyNesting = 0;
        var paramCount = 0;
        while (iterator.hasNext()) {
            var ch = iterator.next();
            switch (ch) {
                case _LParent:
                    parentNesting--;
                    if (parentNesting < 0) {
                        return paramCount;
                    }
                    break;
                case _RParent:
                    parentNesting++;
                    break;
                case _LCurly:
                    curlyNesting--;
                    break;
                case _RCurly:
                    curlyNesting++;
                    break;
                case _LBracket:
                    bracketNesting--;
                    break;
                case _RBracket:
                    bracketNesting++;
                    break;
                case _DQuote:
                case _Quote:
                    while (iterator.hasNext() && ch !== iterator.next()) {
                    }
                    break;
                case _Comma:
                    if (!parentNesting && !bracketNesting && !curlyNesting) {
                        paramCount++;
                    }
                    break;
            }
        }
        return -1;
    };
    myLangSignatureHelpProvider.prototype.isIdentPart = function (ch) {
        if (ch === _USC ||
            ch >= _a && ch <= _z ||
            ch >= _A && ch <= _Z ||
            ch >= _0 && ch <= _9 ||
            ch >= 0x80 && ch <= 0xFFFF) {
            return true;
        }
        return false;
    };
    myLangSignatureHelpProvider.prototype.readIdent = function (iterator) {
        var identStarted = false;
        var ident = '';
        while (iterator.hasNext()) {
            var ch = iterator.next();
            if (!identStarted && (ch === _WSB || ch === _TAB || ch === _NL)) {
                continue;
            }
            if (this.isIdentPart(ch)) {
                identStarted = true;
                ident = String.fromCharCode(ch) + ident;
            }
            else if (identStarted) {
                return ident;
            }
        }
        return ident;
    };
    return myLangSignatureHelpProvider;
}());
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = myLangSignatureHelpProvider;
signatureInfo.parameters.push({ label: args[i].name, documentation: args[i].description });