ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

咖啡完全面板(自动补全)

justinmahar 全部

咖啡脚本自动补全及其他功能!

详细信息

  • 2014.09.26.22.46.30
  • github.com
  • github.com
  • 10年前
  • 1小时前
  • 11年前

安装

  • 总计 25K
  • Win 7K
  • Mac 12K
  • Linux 6K
8月6日 8月5日 8月4日 8月3日 8月2日 8月1日 7月31日 7月30日 7月29日 7月28日 7月27日 7月26日 7月25日 7月24日 7月23日 7月22日 7月21日 7月20日 7月19日 7月18日 7月17日 7月16日 7月15日 7月14日 7月13日 7月12日 7月11日 7月10日 7月9日 7月8日 7月7日 7月6日 7月5日 7月4日 7月3日 7月2日 7月1日 6月30日 6月29日 6月28日 6月27日 6月26日 6月25日 6月24日 6月23日
Windows 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Mac 1 1 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Linux 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

阅读

raw.githubusercontent.com

CoffeeComplete Plus

CoffeeComplete Plus (CC+)是Sublime Text 2的一个插件,它将在您请求时扫描您的咖啡脚本文件,并提供自动补全建议。

此外,此插件还添加了“咖啡:转到定义”命令,该命令将查找所选记号的类、函数或变量定义。

你是否怀念过去的日子?那时,按下空格键的控制-C组合键,你的IDE会快乐地跑来,手拿列表,询问:“先生,需要什么?”并且那个列表实际上是有意义的?并且建议了你感兴趣的项目?我很怀念那些日子,所以我决定采取行动。我学习了Sublime Text 2。这是我一生中最好的决定。然后,我学习了如何制作插件。我的首要任务是制作这个插件——现在它可供你使用了。

自动补全。跳转至定义。

让我们像过去一样再次开始编码。以风格

安装

包控制

建议您使用Sublime Package Control来安装CoffeeComplete Plus。如果您已安装Package Control,请使用“包控制:安装包”命令并搜索CoffeeComplete Plus。完成了。开始编码变得更容易。

手动安装

为了手动安装CoffeeComplete Plus,将仓库克隆到Sublime Text 2的Packages目录中,可以通过转到“首选项”->“浏览包”找到。将目录命名为CoffeeComplete Plus (Autocompletion)

为了您的方便

git clone https://github.com/justinmahar/SublimeCSAutocompletePlus.git "CoffeeComplete Plus (Autocompletion)"

使用方法

自动补全

可以在咖啡文件中通过输入点.运算符或@符号(这是this的缩写)并按下ctrl+space来触发自动补全。然后插件将试图弄清楚你在做什么,并提出一些建议。

还可以配置 Sublime Text 自动触发自动完成,无需按 ctrl+space。这不是插件的一部分,因为可能有来自其他插件的触发可能会被覆盖,但添加它很容易!有关如何操作的说明,请参阅 自定义自动完成触发

示例用法:在一个类内部,您输入 this. 并按 ctrl+space。将显示可用方法和属性的列表。

转到定义

想要查找类、函数或变量的定义位置?不用再找了。

在任何单词上放置光标,然后按 Windows/Linux 的 ctrl+alt+d 或 OS X 的 ctrl+alt+d,即可跳转到所选类、函数或变量的定义。生活美好。

或者,在 Windows/Linux 中使用 ctrl+alt + 左键单击,在 OS X 中使用 ctrl+alt + 左键单击

功能

自动补全

自动完成会在触发自动完成后在点操作符后提出建议。它从当前视图开始,然后扩展到其他 Coffee 文件。正因为如此,大多数查找都非常快。您可以配置 CC+ 以排除某些目录,并仅在其他目录中进行查找。这将进一步提高速度,因为将需要更少的搜索。

自动完成建议按字母顺序首先显示属性,每个属性名称前有一个 ○ 符号表示,然后是按字母顺序排序的方法,每个方法名称前有一个 ● 符号表示。继承属性和方法将在前面有一个 Ⱶ 符号。这为您提供了一个在任何给定时间您能做什么以及这些事物来自何方的美妙视觉分解。很酷。

例如

○ property1
○ propertyTwo
○ someOtherProperty
● methodOne()
● methodTwo(arg1, arg2)
● theLastMethod(arg1, arg2, arg3)
Ⱶ○ inheritedProperty1
Ⱶ○ inheritedPropertyTwo
Ⱶ● inheritedMethod1()
Ⱶ● inheritedMethod2(arg1, arg2)

以下是主要功能。在示例中,[自动完成] 代表用户触发的自动完成动作,通常为 ctrl+space

  • 在操作实例时建议实例属性和方法。

    myLamp = new LavaLamp()
    # Suggests all instance properties and methods of LavaLamp.
    myLamp.[autocomplete]
    
  • 在操作类时建议静态属性和方法。

    # Suggests all static properties and methods of LavaLamp.
    LavaLamp.[autocomplete]
    
  • 支持“this”关键字以及任何定义的别名。

    class LavaLamp
        heatUp: ->
            console.log "Heating up!"
        coolDown: ->
            console.log "Cooling down!"
        moveBlobs: ->
            # Suggests heatUp() and coolDown() methods
            this.[autocomplete]
    
  • 在构造函数中将任何变量分配给 this 将被视为实例属性。

    class LavaLamp
        constructor: (@color, size) ->
            this.size = size
        moveBlobs: ->
            # Suggests color, size and moveBlobs()
            this.[autocomplete]
    
  • 建议超类属性和方法。这适用于实例和静态建议。

    # In the following example, we have a LavaLamp that extends Appliance.
    # Each class has static and non-static properties and methods.
    # Given the context, CC+ will suggest either static or non-static,
    # and will walk up the class hierarchy.
    
    class Appliance
        # Static
        @WARRANTY_YEARS = 10
        @calculateWarrantyExpiration: (currentYear) ->
            console.log "Expires: ", currentYear + Appliance.WARRANTY_YEARS
        # Non-static
        constructor: ->
            this.isSwitchedOn = False
        toggle: ->
            this.isSwitchedOn = !this.isSwitchedOn
    
    class LavaLamp extends Appliance
        # Static
        @BEST_COLOR = "Red"
        @isLampAwesome: (lamp) ->
            if lamp.color == LavaLamp.BEST_COLOR
                console.log "Definitely"
            else
                console.log "Probably"
        # Non-static
        constructor: (@color, size) ->
            this.size = size
    
        moveBlobs: ->
            # Suggests color, isSwitchedOn, size, moveBlobs(), toggle()
            this.[autocomplete]
    
            # Suggests WARRANTY_YEARS and calculateWarrantyExpiration(), which are static.
            Appliance.[autocomplete]
    
            # Suggests BEST_COLOR, WARRANTY_YEARS, calculateWarrantyExpiration(), and isLampAwesome()
            # These are all static properties from the complete class heirarchy.
            LavaLamp.[autocomplete]
    
  • 在自动完成方法后,提供参数的换档(如果适用)。

  • 期望您在命名事物方面不糟糕。将假设类是 UpperCamelCase 且其他一切是 lowerCamelCase。两种方式都有效;如果命名正确,它将更快。

  • 对于每100万个自动完成,一位美丽的按摩师就会出现并为您按摩。您在编码之后一定累了。

对内置类型的支持

CC+ 现在支持以下内置类型的自动完成

  • 数组
  • 布尔值
  • 日期
  • 函数
  • 数字
  • 对象
  • 正则表达式
  • 字符串
  • JSON

这使得生活变得更加容易。

此外,自动完成还会建议从 Object 继承的属性和方法。

自定义类型

如果您经常使用第三方库,并希望为此库提供自动完成,您可以为该库创建自定义类型。这实际上是一组自动完成建议。CC+ 支持jQuery,但您也可以添加更多。如果您添加了自定义类型并且想分享它,请发起一个拉取请求,我将将其添加到插件中。如果您的库像jQuery一样用作函数,您可以映射该函数的返回值到一个类型。有关如何操作的详细说明,请参阅配置部分。

类型提示

记录您的代码,您将得到多方面的回报。这些回报之一是自动完成。另一种方式是全身温暖的舒适感。

CC+ 可以使用您在注释中提供的提示检测类型。您甚至可以添加带提示的方法头。

  • 变量赋值类型提示
    • 当你分配变量时,可以为 CC+ 提供的广告查找类自动完成添加类型提示。此类必须在方括号中,并且在与相同行或前一行上的单行 # 注释中,形式为 [TYPENAME]。其他文本可以围绕类型提示。
# The [String] to add type hinting for
    myString = someObject.getSomething()

    # Now, CC+ knows that it's a String
    myString.[autocomplete]

    # Alternate way to add type hinting
    otherString = someObject.getSomethingElse() # It's a [String], son.
  • 参数类型提示
    • 如果你使用 Codo,或者在编写文档时已习惯为自己类的参数添加类型提示,也可以这样做。这些提示必须在方法签名上方的单行 # 注释中。提示可以是 [TYPENAME] parameterNameparameterName [TYPENAME] 的形式。类型提示周围可以包含其他文本。
# [Animal] critter
    # [Boolean] animalEscapes
    feedAlligator: (critter, animalEscapes) ->
        if animalEscapes
            # CC+ knows that it's an Animal. Will he escape? Autocomplete and choose his destiny!
            critter.[autocomplete]
  • 方法返回类型提示
    • 如果将变量分配到方法的返回值,则可以从此方法收集类型提示。该方法必须在之前行上的单行 # 注释中使用提示 @return [TYPE]。这是一个增值方便。记得,当分配变量时,始终可以使用上面提到的常规类型提示!
class Alligator

        # @return [Animal]
        getLastMeal: ->
            this.lastMeal

        rememberGoodTimes: ->
            critter = this.getLastMeal()
            # CC+ will detect your return type hint and display suggestions for type Animal
            console.log "I remember the time I ate a critter named " + critter.[autocomplete]

使用私有成员排除进行数据隐藏

CoffeeScript 不提供隐藏类属性和方法的显式方法。根据 CoffeeScript 的创造者Jeremy Ashkenas的说法

在 JavaScript 中,隐藏东西并不是什么大问题,通常,我们使用下划线作为对象私有属性的命名惯例。

所以,就留给你自己决定了。

使用下划线很好,直到你的自动完成列表因为充斥着你不应该看到的东西而变得杂乱无章。

CC+ 可以救你于水火。你可以定义正则表达式,排除选择的任何成员。默认情况下,成员使用下划线开头时,在类外(即,不使用 this.)工作时不显示。有关如何添加/删除排除的说明,请参阅配置部分。

转到定义

转到定义对于查找类、函数或变量的定义或声明位置非常有用。再次强调,搜索从当前视图开始,如果没有找到任何内容,则会扩展到其他文件。使用这个功能,你可以轻松地在类之间跳转,并放大到其他文件中定义的函数——即使是在其他文件中定义的,也是 trivial。

  • 支持类、函数和变量赋值。
  • 从所选标记逆向搜索赋值,然后正向搜索。
  • 考虑在 for 循环中声明的变量。
  • 考虑方法参数。
  • 试图找到而不是找不到东西。
  • 包含鼠标和键盘快捷键,方便你的编码方式。

通用

  • 异步和快速查找。这意味着在等待完成或转到定义时不会有 UI 冻结。我们讨厌这样。
  • 您可以为全局 .coffee 搜索排除目录进行配置。(推荐)
  • 您可以将此工具配置为仅在特定位置进行搜索。(推荐)

默认键绑定

Windows/Linux

自动完成:在点操作符后 ctrl+space

转到定义:ctrl+alt+dctrl+alt + left click

Mac OS X

自动完成:在点操作符后 ctrl+space

转到定义:ctrl+alt+dctrl+alt + left click

可以通过导航到首选项 -> 软件包设置 -> CoffeeComplete Plus -> 键绑定来更改键绑定。不推荐您更改默认设置,因为这些设置将覆盖插件更新。相反,请在用户设置中更改您的更改,这将覆盖默认设置。

配置

CoffeeComplete Plus 具有以下可配置设置

用户设置

这些设置可通过 首选项 -> 设置 -> 用户 访问。

自定义自动完成触发

  • auto_complete_triggers - 触发自动完成菜单的字符。

    • Sublime 允许为自动完成菜单设置上下文相关的触发器。这使得当按下 .@ 时,菜单可以立即显示。要为 CoffeeScript 的自动完成添加触发器,打开 首选项 -> 设置 — 用户 并使用以下设置进行修改
"auto_complete_triggers":
           [
              {"characters": ".@", "selector": "source.coffee, source.litcoffee, source.coffee.md"}
           ]
  • 注意,首选项 -> 设置 — 默认 中可能存在其他 auto_complete_triggers 设置。如果存在,只需将默认文件中的 auto_complete_triggers 复制到您自己的设置中,在方括号内添加逗号,然后将上面的圆括号部分粘贴进去。

通用 CoffeeComplete 设置

CoffeeComplete Plus.sublime-settings

排除目录

  • coffee_autocomplete_plus_excluded_dirs — 排除目录。
    • 排除以下目录以搜索 CoffeeScript 类、函数和变量。除了在此设置中列出的目录外,项目中的所有目录都将被搜索。 建议使用。某些排除目录已在设置中指定。
    • 预期值:目录名称数组。
    • 示例
"coffee_autocomplete_plus_excluded_dirs" : [".git", "SVN", "pub", "docs"]

路径限制

  • coffee_autocomplete_plus_restricted_to_paths — 限制搜索到以下目录。
    • 限制搜索的路径。如果指定了一个或多个路径,搜索将仅限于 PATH_TO_PROJECT/your/defined/path。例如,您指定了 src/coffee。现在,只有 PROJECT_PATH/src/coffee 将被扫描。 建议使用。如果为 [],则不应用任何限制。
    • 预期值:相对于您的项目目录的路径数组。
    • 示例
"coffee_autocomplete_plus_restricted_to_paths" : ["src/coffee", "lib/src/coffee"]

数据隐藏的成员排除模式

  • coffee_autocomplete_plus_member_exclusion_regexes — 用于排除自动完成建议的成员的正则表达式。
    • CoffeeScript 不提供在传统意义上创建 private 成员的机制。传统的私有成员以一个下划线 _ 前缀。此配置设置允许您定义希望排除的成员的正则表达式。默认情况下,以下划线开头的成员将被排除。
    • 预期值:Python 正则表达式字符串数组。
    • 示例
"coffee_autocomplete_plus_member_exclusion_regexes": ["^_"] // Excludes members prefixed with underscore

this 的别名

  • coffee_autocomplete_plus_this_aliasesthis 关键字的别名
    • 由于词法作用域,有时您需要为 this 分配别名,如 thatself。请注意,您可以使用肥箭头 => 在底层让 CoffeeScript 为您完成这项工作。无论如何,此配置设置允许您添加或删除使自动完成行为类似于使用 this 的别名。无需进一步搜索 — 假设为 this
    • 预期值:别名字符串数组。
    • 示例
"coffee_autocomplete_plus_this_aliases" : ["that", "self"]

映射函数的返回类型

  • coffee_autocomplete_plus_function_return_types — 特殊函数(如 jQuery)的返回类型映射。
    • 您可能希望直接调用特殊函数的返回值。例如,当使用 jQuery 时,您可能键入 $(selector). 并希望得到一些自动完成建议。如果您定义了一个自定义类型,您可以映射函数名称(如 $jQuery)到该自定义类型。请查看下一个配置部分以定义自定义类型。
    • 预期值:对象数组。每个对象都有一个 function_names 属性,它映射到一个字符串名称数组,以及一个 type_name 属性,它映射到函数返回的类型名称。
    • 示例
"coffee_autocomplete_plus_function_return_types": 
          [
            {
                "function_names": ["$", "jQuery"],
                "type_name": "$"
            }
        ]

自定义类型

CoffeeComplete Plus Custom Types.sublime-settings

  • coffee_autocomplete_plus_custom_types – 自定义类型,允许使用如 jQuery 的库。
    • 如果您想定义自定义类型,请在此处放置它们。自动完成将为您提供定义的建议。默认情况下,已定义 jQuery 类型。
    • 方法参数具有一个name属性和一个选项insertion,这是将被实际插入的文本。例如,这适用于插入回调中的->语法。
    • 使用enabled属性启用或禁用自定义类型。
    • 以下示例可以作为起点
{
            "name": "MyType",
            "enabled": true,
            "constructors": [{"args": []}],
            "static_properties": [{"name": "CONSTANT_ONE"}, {"name": "CONSTANT_TWO"}],
            "static_methods": 
            [
                {"name":"myStaticMethod", "args": [{"name": "arg1"}, {"name": "arg2"}]},
                {"name":"myStaticMethodTwo", "args": []}
            ],
            "instance_properties": [{"name": "thingOne"}, {"name": "thingTwo"}, {"name": "thingThree"}],
            "instance_methods":
            [
                {"name":"doStuffWithCallback", "args": [{"name": "numTimes"}, {"name": "callback()", "insertion": "->"}]},
                {"name":"doMoreStuff", "args": [{"name": "numTimes"}, {"name": "extraAmount"}]}
            ]
        }

内置类型

CoffeeComplete Plus Built-In Types.sublime-settings

  • coffee_autocomplete_plus_built_in_types - 内置类型,如Object、Array和String。
    • 这些都是JavaScript的内置类型。这些规格是从Mozilla MDN中获得的。
    • 如果您想禁用内置的任何类型,可以将enabled属性更改为false

要配置这些设置,请打开首选项 -> 打包设置 -> CoffeeComplete Plus。不建议修改默认设置,因为它们将被插件更新覆盖。相反,请在用户设置中进行更改,这将覆盖默认设置。

限制和计划

“隐藏一个缺陷,全世界都会想到最坏的情况。” —— 马库斯·奥勒留斯,罗马帝国第16位皇帝

自动补全很智能,但不是Mensa智能。底层,我们使用正则表达式和大量的扫描。我编码这个很迅速,这是我第一个插件,所以可能(读:可能确实有) bugs。如果有,请告诉我。当我扩展功能时,我将尝试修复其限制。

现在是这样的待办事项列表

  • 清理代码。使模块化/可重用。首要任务。
  • 构造函数支持
    • 向内置类型添加构造函数
  • 其他内置类型(Error等)
  • 可选参数检测
    • 方括号表示可选参数。
    • 示例:methodName(var1, optionalVar2="嘿,我是可选的")将自动补全到classInstance.methodName(var1, [optionalVar2])
  • 修复问题
  • 转到定义知道对象方法被调用的类型。目前,它是在猜测。
  • 在获取方法返回类型时支持内置类型。

我安装了一个插件,却只失望了,因为它没有达到我的期望。如果你有这种感觉,请告诉我如何让我更好地为这个插件服务,我会尽我所能。

编码快乐!

-Justin

许可证

CoffeeComplete Plus许可证为MIT许可证。

版权所有 © 2013 Justin Mahar [email protected]

特此允许任何获得本软件及其相关文档副本(以下简称"软件")的个人在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向提供软件的个人这样做,但应符合以下条件

上述版权声明和本许可声明应包含在软件的所有副本或大部分副本中。

软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、适用于特定目的和不侵权保证。在任何情况下,作者或版权所有者均不对因合同、侵权或其他任何行为而产生的任何索赔、损害或其他责任负责,无论是源于、因之或与之相关软件或其使用或其他处理。