JavaScript格式化程序Eclipse(Ctrl-Shift-F)

26

我不喜欢问这个问题,但是我已经很长时间一直在寻找解决方法了。

这是一个简单的问题。我使用NetBeans已经有很长时间了,但最近出于一些原因转换到了Eclipse。无论如何,我发现JavaScript源代码的格式化行为非常奇怪。

这里是一个由我自己格式化的JavaScript代码块示例:

function buildDatabase () {
    db.transaction(function (tx) {
        tx.executeSql('DROP TABLE IF EXISTS calendar');
        tx.executeSql('CREATE TABLE IF NOT EXISTS calendar(id UNIQUE, summary, description, location, startdate, enddate)');
    }, function (err) {
        document.querySelector('#debugLog').innerHTML += '<p><code>' + err.message + '</code></p>';
    });
}

非常简单的东西。现在,如果我按下 Ctrl + Shift + F 来格式化它(因为说实话这个功能可以极大地节省时间),出于我无法理解的原因,它现在会变成这样:

function buildDatabase() {
    db
            .transaction(
                    function(tx) {
                        tx.executeSql('DROP TABLE IF EXISTS calendar');
                        tx
                                .executeSql('CREATE TABLE IF NOT EXISTS calendar(id UNIQUE, summary, description, location, startdate, enddate)');
                    },
                    function(err) {
                        document.querySelector('#debugLog').innerHTML += '<p><code>'
                                + err.message + '</code></p>';
                    });
}
为什么它想把 .transaction 移到新的一行?它离80个字符宽度远着呢。看起来非常混乱。第二个 .executeSql 也在做同样的事情,但它仍然无法正确换行。这很奇怪。
当然,我知道窗口>首选项>JavaScript>代码风格,但无论我在这里做什么都无法修复它。我希望有更多使用 Eclipse 的经验的人知道出了什么问题。
我安装了Android Dev Tools和PDT。但这种行为在安装这些插件之前就存在了。
任何帮助都将不胜感激,谢谢。

2
目前的解决方法是使用来自http://www.aptana.com/downloads/start的Aptana Eclipse插件。但是我仍然保持开放状态,因为我想知道是否可能简单修复Web Dev Tools中内置的JavaScript格式化程序。 - Jeff
5个回答

47

通过访问可以解决这个问题。

Preferences > JavaScript > Code Style > Formatter

操作步骤:

  1. 创建一个新的个人资料(因为您无法编辑内置个人资料),如果尚未创建,请单击编辑...
  2. 打开折行选项卡。
  3. 最大行宽字段中输入9999
  4. 点击应用确定

对于超过9999个字符的代码行,问题将再次出现,但我可以接受这一点。


这个可以工作!但是,这并没有修复之前Eclipse破坏的所有“损坏格式”。 - oak
2
这是最好的答案,应该被接受。 - Amit Kumar

4

根据我的经验,是长而不可分割的行导致了这个问题。非常令人恼火。尝试将长字符串常量(例如 "'CREATE TABLE IF NOT EXISTS calendar(id UNIQUE, summary, description, location, startdate, enddate)'") 放入单独的变量中,或者如果这真的让你很烦,你可以拆分它并使用 + 进行连接。

我尝试过这样做:

function buildDatabase() {
    var sql1 = 'CREATE TABLE IF NOT EXISTS calendar(id UNIQUE, summary, description, location, startdate, enddate)';

    db.transaction(function(tx) {
        tx.executeSql('DROP TABLE IF EXISTS calendar');
        tx.executeSql(sql1);
    }, function(err) {
        document.querySelector('#debugLog').innerHTML += '<p><code>'
            + err.message + '</code></p>';
    });
}

已经有一段时间没有考虑过这个特定的问题了,但这是我与将最大行大小设置为200左右相结合使用的技术。这可以防止格式化程序做出(在我看来)不良的格式化决策,但有时会出现非常长的行。 - Jeff
不需要修改您的代码。查看我的答案 - Luca Fagioli

4

偏好设置 > JavaScript > 代码风格 > 格式化程序 > 行包装 (制表符)

取消勾选 >> 偏好包装外部表达式 (将嵌套表达式保持在一行上)


3

我曾经遇到过相同的问题。我的做法是安装Aptana Studio插件并开始使用它自带的JavaScript编辑器。它比WTP自带的编辑器好用多了。


0

我也发现了这个问题,这也是我主要转回NetBeans的原因之一。

我没有解决方案,但我可以给你一些通用的提示,至少对我有些帮助。

  1. 尝试将括号放在新行而不是像这样:});
  2. 尝试像这样解析参数:

    calendar(id UNIQUE, summary, description, location, startdate, enddate)

也许可以试试这种方法。

calendar(id 
UNIQUE, 
summary, 
description, 
location, 
startdate, 
enddate)

最后,您可以尝试在连接字符串时将“+”放在新行上。

就像我说的那样,我知道这并没有解决您的问题,但我想这至少可以帮助您,在更好的解决方案出现之前。

祝您好运。


你的第二个建议没有意义 - 你重复了同样的事情。 - Rene Saarsoo
抱歉,我在脑海中已经将这些格式化了,但显然我的电脑不够智能,无法理解我想要的。 <叹气> 技术的不足... :) - NotMyName

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接