如何在 Sublime Text 中格式化 dart 代码

问题描述 投票:0回答:1

我下载了带有 dart 的 flutter,并开始在 sublime text 上编码,但是当我按 formatt code 时,它给了我错误的消息,即 “找不到此类型文件(dart)的格式化程序。”但是当我运行此命令“dart”时format . " 在代码将被格式化的目录中,我的问题是如何在 sublime 中格式化代码而不是在 cmd 中编写该命令?

注:

  • 当我在 cmd 中运行
    dart --version
    时,它会显示其版本,但是如果我运行
    dartfmt --version
    ,它无法识别它以及我下载的 codeformatter 包
flutter dart sublimetext3 formatter dartfmt
1个回答
0
投票

如果您具体指的是插件formatter,则不能,不支持dart,但您可以按照git页面上的说明轻松实现它。

如果您不知道/想自己做,只需做以下两件事:

使用此代码创建文件

${packages}/Formatter/modules/formatter_dartformat.py
(该文件位于 Windows 上的
%APPDATA%/Sublime Text/Packages/Formatter/modules
)。

import logging
from ..core import common

log = logging.getLogger(__name__)

EXECUTABLES = ['dart']
MODULE_CONFIG = {
    'name': 'DartFormat', 
    'source': 'https://dart.dev/tools/dart-format', 

    'uid': 'dartformat', 
    'type': 'beautifier',                  
    'syntaxes': ['dart'], 

    'executable_path': '',
    'args': ['format'],
}

class DartformatFormatter:
    def __init__(self, *args, **kwargs):
        self.view = kwargs.get('view', None)
        self.uid = kwargs.get('uid', None)
        self.region = kwargs.get('region', None)
        self.is_selected = kwargs.get('is_selected', False)
        self.pathinfo = common.get_pathinfo(self.view.file_name())

    def get_cmd(self):
        executable = common.get_executable(
            self.view, self.uid, EXECUTABLES, runtime_type=None
        )

        if executable is not None: 
            args = common.get_args(self.uid)
            
            cmd = [executable]
            cmd.extend(args or MODULE_CONFIG['args'])
            
            return cmd
        else:
            return None


    def format(self, text):
        cmd = self.get_cmd()
        log.debug('Current arguments: %s', cmd)
        cmd = common.set_fix_cmds(cmd, self.uid)
        if not cmd:
            return None

        try:
            proc = common.exec_cmd(cmd, self.pathinfo['cwd'])
            stdout, stderr = proc.communicate(text.encode('utf-8'))

            errno = proc.returncode
            if errno > 0:
                log.error(
                    'File not formatted due to an error (errno=%d): "%s"', 
                    errno, stderr.decode('utf-8')
                )
            else:
                return stdout.decode('utf-8')
        except OSError:
            log.error(
                'An error occurred while executing the command: %s', 
                ' '.join(cmd)
            )

        return None

然后将模块添加到配置文件中

${packages}/User/Formatter.sublime-settings

{
    // The other variables

    "formatters": {

        "dartformat": {
            "disable": false,
            "format_on_save": false,
            "syntaxes": ["dart"],
            "args": ["format", "-l", "360"],
            "executable_path": "O:/Flutter/bin/dart",
        },

        // The other formatters that you may have
    }
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.