Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自动生成Visual Studio VsDoc for JavaScript库_Javascript_Visual Studio_Documentation_Intellisense_Vsdoc - Fatal编程技术网

自动生成Visual Studio VsDoc for JavaScript库

自动生成Visual Studio VsDoc for JavaScript库,javascript,visual-studio,documentation,intellisense,vsdoc,Javascript,Visual Studio,Documentation,Intellisense,Vsdoc,我正在重构JavaScript库以利用单个名称空间。我们有大约200个模块,它们以前注册为jQuery插件或在全局对象(bad)上。在过去的豁免中,为了让Intellisense正常工作,我为每个模块(我想要Intellisense的模块)添加了模块引用,作为 但是,当我将NewModule.js定义为(并编译)时: 我没有获得适当的智能感知: Ns.alert() //no Intellisense help 这是令人困惑的,因为它在子名称空间上工作得非常好。我被迫这样做: Ns.alert

我正在重构JavaScript库以利用单个名称空间。我们有大约200个模块,它们以前注册为jQuery插件或在全局对象(bad)上。在过去的豁免中,为了让Intellisense正常工作,我为每个模块(我想要Intellisense的模块)添加了模块引用,作为

但是,当我将NewModule.js定义为(并编译)时:

我没有获得适当的智能感知:

Ns.alert() //no Intellisense help
这是令人困惑的,因为它在子名称空间上工作得非常好。我被迫这样做:

Ns.alert = Ns.alert || Ns.register('alert', function ....
编译后,Intellisense突然(显然)按预期工作

Intellisense使用jQuery的vsdoc(我在构建这个过程中仔细研究了vsdoc)与链式方法一起工作,而jQuery没有使用
y.x=y.x | | new x()
技巧来实现它

因此,这里有一个修改后的问题:从结构的角度来看,我能感觉到jQuery的vsdoc和我自己的vsdoc之间唯一明显的区别是jQuery在同一个闭包中组装了整个名称空间。我的命名空间和每个模块都包装在单独的闭包中。相比之下,我的vsdoc看起来像一个长串的自执行函数

与放弃关闭/模块模式相关的风险太大;而且很难单独检验这个假设。当库很小时,Intellisense工作正常,因此无法生成数千个“Javascript Intellisense消息:C:\\js\NameSpace vsdoc.js(40:16):需要对象”错误


想法?

我同意@Ilya Volodin。 ReSharper是VisualStudio的一个很好的工具。 我只用了一个月,我不能没有它

这并不能回答您的问题,但它对您非常有用

以下是一个很好的总结,可以在官方网站上找到:


“ReSharper是一个著名的高效工具,它使Microsoft Visual Studio IDE变得更好。全球成千上万的.NET开发人员都想知道,如果没有ReSharper的代码检查、自动重构、快速发布和编码帮助,他们是如何生活的。”

我知道这不是你想要的,但是你试过ReSharper6吗?它有一个非常好的JavaScript intellisense支持,而不需要vsdoc。也许为新开发人员购买许可证会更容易,然后不仅要维护源代码,还要维护vsdocs?@Ilya Volodin,ReSharper真是太棒了。它提供的JavaScript Intellisense的增强非常棒;然而,它实际上只是在做VisualStudio试图在符合标准的虚拟浏览器中做的事情。为了让VS提供JS Intellisense,它必须使用JS引擎(通常是IE引擎)错误地执行代码。ReSharper确实大大改进了这一点;但这不是问题所在。同样,对于jQuery,无论是否使用RS,我都可以在$('#node').children().children()上获得链式Intellisense——这必须与他们的vsdoc(afaik)相关,但我仍然缺少一些东西;但是,它本身并不能解决这个问题。我们目前使用的是Resharper 7,它不包括用于命名空间脚本文件的intellisense。如果您有一个名为
AppName.Customer.Address
的文件
Address.js
,并且它有一个方法
ValidateCustomerAddress()
,例如在另一个名为命名空间的文件中调用
stringhasnonnumbers()
,名为
Util.js
名称空间为
AppName.Common.Util
则intellisense将找不到
AppName.Common.Util.StringHasnonNumber()
,因为它不在
AppName.Customer.Address
名称空间的范围内。添加
///reference…
,Resharper可以为您提供命名空间文件的intellisense。仅供参考,Resharper将我的Visual Studio实例拖慢了一段时间,不值得这么做。
use strict;

my $dir = $ARGV[0];
my $destfile = "$dir\\js\\NameSpace-vsdoc.js";

unlink($destfile);

my $js = "";
$js .= extractFile("$dir\\js\\_first-vsdoc.js");
$js .= extractFile("$dir\\js\\NameSpace.js");
$js .= extract("$dir\\js\\modules");
#Add additional directories as needed
$js .= extractFile("$dir\\js\\_last-vsdoc.js");

open(VSDOC, "> $destfile") or die("Cannot open vsdoc file: $destfile ; $!");
print VSDOC $js;
close(VSDOC); 

sub extract
{
    my $ret = "";
    my $path = $_[0];
    opendir(JSDIR, $path) or die("Cannot open js directory: $path ; $!");
    while((my $filename = readdir(JSDIR)))
    {
        if($filename =~ /.*\.js$/ &&
           $filename !~ /-vsdoc/ &&
           $filename !~ /_first/ &&
           $filename !~ /_last/ &&
           $filename !~ /.min\.js/) 
        {
            $ret .= extractFile("$path\\$filename");
        }
    }
    closedir(JSDIR);
    return $ret;
}

sub extractFile
{
    my $ret = "";
    my $filename = $_[0];
    open(JSFILE, "$filename") or die("Cannot open js file: $filename ; $!");
    while((my $line = <JSFILE>)) 
    {
        if($line !~ m/-vsdoc\.js/ )
        {
            $ret .= $line;         
        }
    }
    close(JSFILE);
    return $ret;
}

printf("Finished generating NameSpace vsdoc.\n");
Ns.register() //visible
Ns.controls.register() //visible
Ns.actions.register() //visible
(function _alertClosure() {
    Ns.register('alert', function alert(someText) {
        ///insert proper vsdoc style comment
    });
}());
Ns.alert() //no Intellisense help
Ns.alert = Ns.alert || Ns.register('alert', function ....