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

AutoAligner

Sublime Text 插件,用于自动代码对齐。

详情

安装

  • 总计 45K
  • Win 30K
  • Mac 8K
  • Linux 7K
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日 6月22日
Windows 2 0 1 2 2 1 0 1 1 3 0 2 0 1 1 2 1 0 1 0 0 1 2 0 2 1 2 3 2 3 1 2 2 0 2 0 3 0 1 0 0 2 4 0 0 2
Mac 2 1 0 0 1 0 1 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 3 1 1 0
Linux 2 0 0 0 0 1 0 0 0 1 1 0 1 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0

README

源代码
raw.​githubusercontent.​com

Aligner Build Status

Sublime Text 插件,用于自动代码对齐。

该项目是一个自动代码对齐的工具。通过格式化源代码,使得类似的语法结构 jedno nad druhým uspořádání často zlepšuje čitelnost.

首先,为了方便起见,将代码行分割为具有通用类型的标记。例如,标识符具有类型 :id,而括号具有类型 :bracket。项目实现了类型层次结构,这简化了设置。它定义在 heirarchy.rb 中。

每个类型必须匹配识别这种类型标记的正则表达式。此外,正则表达式的序列必须遵循层次结构。这意味着使用更通用的正则表达式。这个序列在 TypeData 类和 staff.rb 文件中描述。

为了实现最大的灵活性和独立性,以及源代码编写的语言类型,实现了上下文无关语法的解析器。

它与基于动态规划的算法协同工作,该算法找到两个标记数组具有最大权重的匹配。

BNF 中的语法在文件 grammar.rb 中。语法应该设计为如果可以应用压合规则,则应用它,否则任何标记序列仍然应该是正确的。

以下是语法的示例

@@grammar.add_rule(:main, [:expr    ], [:reducible]);
@@grammar.add_rule(:expr, [:expr, :p], [:reducible]);
@@grammar.add_rule(:expr, [:p       ], [:reducible]);
t1 = [:expr, TokenTemplate.new(['=']), :expr]
@@grammar.add_rule(:expr, t1)
@@grammar.add_rule(:p, [:t], [:reducible])
@@grammar.add_rule(:t, [TokenTemplate.new(:id)], [:reducible]);

此语法定义了赋值操作。向添加规则的过程传递的第一个参数是非终结符。 :main - 语法公理。第二个参数是规则本身。它可能由非终结符和标记模板组成。模板可以定义有效的标记类型、特定的值和排除的值。

显示的语法对应于以下记录在经典 Backus–Naur 形式中

main ::= expr
expr ::= expr p | p | expr '=' expr
p    ::= t
t    ::= <any identifier>

标志 :reducible 表示该规则对被拟合的元表达式没有影响。元表达式是一组令牌的数组,其中也包括其他元表达式。在匹配过程中,只比较获取的树结构各级与另一个元表达式的对应级别。考虑以下示例:“ f(a, b + c ) f( b + c, a)”

and

f(a , b + c) f(b + c, a )

When using the grammar, the program causes the alignment of the second type,
in spite of the fact that different function arguments are similar in spelling.
Such behavior is, of course, leads to improvement of readability.

To maximize the quality for each language you need to write its own grammar.

## Examples of work

From

@@types_inheritance[:space] = nil; @@types_inheritance[:quote] = nil; @@types_inheritance[:regexp] = nil; @@types_inheritance[:id] = nil; @@types_inheritance[:spchar] = nil;

To

@@types_inheritance[:space ] = nil; @@types_inheritance[:quote ] = nil; @@types_inheritance[:regexp] = nil; @@types_inheritance[:id ] = nil; @@types_inheritance[:spchar] = nil;

---

From

switch (state)
{
case State.QLD: city = "Brisbane"; break; case State.WA: city = “Perth”; break;
case State.NSW: city = “Sydney”; break;
default: city = “???”; break;
}

To

switch (state)
{ case State.QLD:city = “Brisbane”; break; case State.WA :city = “Perth” ; break; case State.NSW:city = “Sydney” ; break; default :city = “???” ; break; }

##Learning

Due to the fact that different people are accustomed to different ways of setting padding between tokens,
you must use the simplest method of fine-tuning.
The project implements a method of learning. The input is properly formatted string.
The resulting information is aggregated and used in the future for proper indenting.

There are 2 types of training: minimum and maximum indents.

Training starts with the command `ruby learner_test.rb <lang_type>`.
It is not required by default.
The resulting information is stored in files `max_by_type_<lang_type>.dat` and `min_by_type_<lang_type>.dat`.

##Installation

First of all, make sure that your system has a ruby interpreter `ver. >= 1.9`.
In Ubuntu you can use following command:

sudo apt-get install ruby

To install the plugin, clone it to your Siblime Text 2/3 Package directory with following command:

cd ~/.config/sublime-text-3/Packages git clone https://github.com/generall/aligner.git AutoAligner

Or you may install it with Package Control using name `AutoAligner`.

Default hotkey for alignment is: `["ctrl+k","ctrl+a"]`.

##Prospection

Here is a list of things that have to be improved.

* Automatic detection of similar lines for fully automated code alignment.
* Customization for different languages.
    * extended grammar
    * extended set of types of token
    * Customized languages:
        * C
        * java
* Extended machine learning for alignment decision
    * experiments with Markov chain learing
* to be continued...

## The expected course of action to add the grammar.

In file `staff.rb` add new regexp array by following pattern:

@@regexp_array[:new_grammar_name] = [ # [, , , , , ] [/'(.|['])*'/ , :quote , true , 0.1, 0, 1], … ]

Add BNF to file `grammar.rb`.