def try_find_prettier_config(self, view): try: source_file_dir = get_file_abs_dir(view.file_name()) except: source_file_dir = get_st_project_path() st_project_path = get_st_project_path() # # 1. Attempt to use prettier config defined in the 'additional_cli_args' (if exist - ensure it's abs path) # check if '--config <filename>' is defined in 'additional_cli_args' # parsed_additional_cli_args = parse_additional_cli_args(self.get_additional_cli_args(view)) additional_cli_arg_config = get_cli_arg_value(self.additional_cli_args, "--config") if not is_str_none_or_empty(additional_cli_arg_config): additional_cli_arg_config = os.path.normpath( additional_cli_arg_config) if not os.path.isabs(additional_cli_arg_config): additional_cli_arg_config = in_source_file_path_or_project_root( source_file_dir, st_project_path, additional_cli_arg_config) if additional_cli_arg_config and os.path.exists( additional_cli_arg_config): log_debug( view, "Using Prettier config file defined in 'additional_cli_args' config -> {0}'" "".format(additional_cli_arg_config), True, ) return additional_cli_arg_config log_warn( "Cannot find Prettier config file defined " "in 'additional_cli_args' -> '--config <path>'.", True, ) return None # # 2. Attempt to resolve a prettier config path: resolved_prettier_config = find_prettier_config(source_file_dir) if resolved_prettier_config and os.path.exists( resolved_prettier_config): log_debug( view, "Prettier config file discovered at '{0}'".format( resolved_prettier_config), ) return resolved_prettier_config log_debug( view, "Prettier config file not found. " "Will use Prettier options defined in Sublime Text '{0}' file.". format(SETTINGS_FILENAME), True, ) return None
def try_find_prettier_config(self, view): source_file_dir = get_file_abs_dir(view.file_name()) st_project_path = get_st_project_path() # # 1. Check if defined in 'additional_cli_args': additional_cli_arg_config = get_cli_arg_value(self.additional_cli_args, '--config') if not is_str_none_or_empty(additional_cli_arg_config): additional_cli_arg_config = os.path.normpath(additional_cli_arg_config) if not os.path.isabs(additional_cli_arg_config): additional_cli_arg_config = in_source_file_path_or_project_root( source_file_dir, st_project_path, additional_cli_arg_config) if additional_cli_arg_config and os.path.exists(additional_cli_arg_config): log_debug(view, "Using Prettier config file defined in additional_cli_args '{0}'" .format(additional_cli_arg_config), True) return additional_cli_arg_config log_warn("Could not find Prettier config file defined in additional_cli_args '{0}'" .format(str(additional_cli_arg_config)), True) return None # # 2. Attempt to automatically resolve: resolved_prettier_config = find_prettier_config(source_file_dir) if resolved_prettier_config and os.path.exists(resolved_prettier_config): log_debug(view, "Found Prettier config file '{0}'".format(resolved_prettier_config)) return resolved_prettier_config log_debug(view, "Could not resolve Prettier config file, will use options defined in Sublime Text.", True) return None
def try_find_prettier_config(self, view): source_file_dir = get_file_abs_dir(view.file_name()) st_project_path = get_st_project_path() # # 1. Attempt to use prettier config defined in the 'additional_cli_args' (if exist - ensure it's abs path) # check if '--config <filename>' is defined in 'additional_cli_args' # parsed_additional_cli_args = parse_additional_cli_args(self.get_additional_cli_args(view)) additional_cli_arg_config = get_cli_arg_value(self.additional_cli_args, '--config') if not is_str_none_or_empty(additional_cli_arg_config): additional_cli_arg_config = os.path.normpath(additional_cli_arg_config) if not os.path.isabs(additional_cli_arg_config): additional_cli_arg_config = in_source_file_path_or_project_root( source_file_dir, st_project_path, additional_cli_arg_config) if additional_cli_arg_config and os.path.exists(additional_cli_arg_config): log_debug(view, "Using Prettier config file defined in 'additional_cli_args' config -> {0}'" "".format(additional_cli_arg_config), True) return additional_cli_arg_config log_warn("Cannot find Prettier config file defined " "in 'additional_cli_args' -> '--config <path>'.", True) return None # # 2. Attempt to resolve a prettier config path: resolved_prettier_config = find_prettier_config(source_file_dir) if resolved_prettier_config and os.path.exists(resolved_prettier_config): log_debug(view, "Prettier config file discovered at '{0}'".format(resolved_prettier_config)) return resolved_prettier_config log_debug(view, "Prettier config file not found. " "Will use Prettier options defined in Sublime Text '{0}' file." .format(SETTINGS_FILENAME), True) return None
def format_code(self, source, node_path, prettier_cli_path, prettier_options, view, provide_cursor=False, is_selection=False): self._error_message = None cursor = None if provide_cursor: cursor = view.sel()[0].a prettier_options += ['--cursor-offset', str(cursor)] if is_windows() and is_str_none_or_empty( node_path) and prettier_cli_path.endswith(".js"): # on windows, when a custom 'node_path' is not specified and 'prettier_cli_path' is # presumably a .js script (e.g: 'bin-prettier.js')... # automatically prepend the environment detected node[.exe|.cmd] path to # the generated command (see #146 --no-bin-links). cmd = [resolve_node_path(view.file_name())] \ + [prettier_cli_path] \ + ['--stdin'] \ + prettier_options elif is_str_none_or_empty(node_path): cmd = [prettier_cli_path] \ + ['--stdin'] \ + prettier_options else: cmd = [node_path] \ + [prettier_cli_path] \ + ['--stdin'] \ + prettier_options try: format_debug_message('Prettier CLI Command', list_to_str(cmd), debug_enabled(view)) proc = Popen(cmd, stdin=PIPE, stderr=PIPE, stdout=PIPE, env=get_proc_env(), shell=is_windows()) stdout, stderr = proc.communicate(input=source.encode('utf-8')) if proc.returncode != 0: error_output = stderr.decode('utf-8') self.error_message = format_error_message( error_output, str(proc.returncode)) # detect and scroll to 'Syntax Errors' (if not formatting a selection): if not is_selection: _, _, error_line, error_col = self.has_syntax_error( error_output) if error_line != -1 and error_col != -1: scroll_view_to(view, error_line, error_col) return None new_cursor = None if stderr: stderr_output = stderr.decode('utf-8') if provide_cursor: stderr_lines = stderr_output.splitlines() stderr_output, new_cursor = '\n'.join( stderr_lines[:-1]), stderr_lines[-1] # allow warnings to pass-through if stderr_output: print( format_error_message(stderr_output, str(proc.returncode))) if provide_cursor: if not new_cursor and cursor is not None: new_cursor = cursor try: new_cursor = int(new_cursor) except ValueError: log_warn( view, 'Adjusted cursor position could not be parsed (int).') return stdout.decode('utf-8'), None return stdout.decode('utf-8'), new_cursor return stdout.decode('utf-8') except OSError as ex: sublime.error_message('{0} - {1}'.format(PLUGIN_NAME, ex)) raise