Eclipse Javascript 格式化程序 (ctrl-shift-f)

Posted

技术标签:

【中文标题】Eclipse Javascript 格式化程序 (ctrl-shift-f)【英文标题】:Eclipse Javascript formatter (ctrl-shift-f) 【发布时间】:2012-10-13 17:12:35 【问题描述】:

我不喜欢问这个问题,但老实说,很长时间以来我一直在寻找解决这个问题的方法。

这是一个简单的问题。我已经使用 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 也是如此,但仍然无法正确包装。这很奇怪。

现在我当然知道 Window > Preferences > JavaScript > Code Style 但无论我在这里做什么都可以解决这个问题。我希望有人对 Eclipse 有更多的经验来知道出了什么问题。

我已安装 android 开发工具和 PDT。但是,此行为预先存在这些插件的安装。

任何帮助将不胜感激,谢谢。

【问题讨论】:

当前的解决方法是使用来自aptana.com/downloads/start 的 Aptana Eclipse 插件。但是我保持开放状态是因为我想知道是否可以简单地从 Web 开发工具中修复内置的 JavaScript 格式化程序。 【参考方案1】:

问题可以通过访问解决

Preferences > JavaScript > Code Style > Formatter

继续:

    创建一个新的配置文件(因为您无法编辑内置的配置文件),如果您还没有,请点击Edit...。 打开Line Wrapping 标签。 在Maximum line width 字段中,输入9999。 点击ApplyOk

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

【讨论】:

这行得通!但是,这并没有解决所有“损坏的格式”日食在此之前所做的一切.. 这是最好的答案,应该被接受。【参考方案2】:

根据我的经验,导致此问题的原因是长而牢不可破的线路。很烦人。尝试将长字符串常量(如“'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 左右。这可以防止格式化程序做出 (IMO) 糟糕的格式化决定,但我有时会遇到很长的行。 无需修改代码。 See my answer.【参考方案3】:

首选项 > JavaScript > 代码样式 > 格式化程序 > 换行(选项卡)

取消选中 >>更喜欢包装外部表达式(将嵌套表达式保持在一行)

【讨论】:

【参考方案4】:

我遇到了同样的问题。我所做的是安装 Aptana Studio Plugin 并开始使用它附带的 JavaScript 编辑器。它比 WTP 自带的要好很多。

【讨论】:

【参考方案5】:

我也发现了这一点,这也是我在很大程度上回到 NetBeans 的主要原因之一。

我没有解决方案,但我可以给你一些对我有用的一般提示,至少在一定程度上。

    而不是像这样的括号:);试着把每一个都放在一个新的行上。

    而不是像这样解析参数:

    日历(ID UNIQUE,摘要,描述,位置,开始日期,结束日期)

可以试试

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

   3. 最后,您可以尝试在连接字符串时将 + 换行。

就像我说的,我知道这并不能解决您的问题,但我认为至少它可能会对您有所帮助,直到出现更好的解决方案。

祝你好运。

【讨论】:

您的建议 nr 2 没有意义 - 您两次陈述同一件事。 抱歉,我已经在脑海中格式化了这些东西,但显然我的电脑不够智能,无法理解我想要的 技术的缺点... :)

以上是关于Eclipse Javascript 格式化程序 (ctrl-shift-f)的主要内容,如果未能解决你的问题,请参考以下文章

是否可以设置 Eclipse Javascript 格式化程序以符合 JSLint?

eclipse怎么格式化js代码

idea配置html和javascript的格式化文件?

eclipse格式化代码样式

Eclipse 格式化程序没有正确缩进

Eclipse 格式化程序对齐列中的字段