func (self *jsbeautifier) parse_token(t tokenizer.Token) { for _, comment_token := range t.CommentsBefore() { self.handle_token(&comment_token) } self.handle_token(&t) self.last_last_text = self.flags.last_text self.last_type = t.Type() self.flags.last_text = t.Text() self.token_pos++ }
func (self *jsbeautifier) handle_word(current_token *tokenizer.Token) { if current_token.Type() == "TK_RESERVED" && self.flags.mode != ObjectLiteral && (current_token.Text() == "set" || current_token.Text() == "get") { current_token.SetType("TK_WORD") } if current_token.Type() == "TK_RESERVED" && self.flags.mode == ObjectLiteral { next_token, _ := self.get_token() if next_token.Text() == ":" { current_token.SetType("TK_WORD") } } if self.start_of_statement(*current_token) { } else if current_token.WantedNewLine() && !self.is_expression(self.flags.mode) && (self.last_type != "TK_OPERATOR" || (self.flags.last_text == "--" || self.flags.last_text == "++")) && self.last_type != "TK_EQUALS" && (self.options["preserve_newlines"].(bool) || !(self.last_type == "TK_RESERVED" && utils.InStrArray(self.flags.last_text, []string{"var", "let", "const", "set", "get"}))) { self.print_newline(false, false) } if self.flags.do_block && !self.flags.do_while { if current_token.Type() == "TK_RESERVED" && current_token.Text() == "while" { self.output.space_before_token = true self.print_token(*current_token, "") self.output.space_before_token = true self.flags.do_while = true return } else { self.print_newline(false, false) self.flags.do_block = false } } if self.flags.if_block { if (!self.flags.else_block) && (current_token.Type() == "TK_RESERVED" && current_token.Text() == "else") { self.flags.else_block = true } else { for self.flags.mode == Statement { self.restore_mode() } self.flags.if_block = false } } if current_token.Type() == "TK_RESERVED" && (current_token.Text() == "case" || (current_token.Text() == "default" && self.flags.in_case_statement)) { self.print_newline(false, false) if self.flags.case_body || self.options["jslint_happy"].(bool) { self.flags.case_body = false self.deindent() } self.print_token(*current_token, "") self.flags.in_case = true self.flags.in_case_statement = true return } if current_token.Type() == "TK_RESERVED" && current_token.Text() == "function" { if (self.flags.last_text == "}" || self.flags.last_text == ";") || (self.output.just_added_newline() && !utils.InStrArray(self.flags.last_text, []string{"[", "{", ":", "=", ","})) { if !self.output.just_added_blankline() && len(current_token.CommentsBefore()) == 0 { self.print_newline(false, false) self.print_newline(true, false) } } if self.last_type == "TK_RESERVED" || self.last_type == "TK_WORD" { if self.last_type == "TK_RESERVED" && utils.InStrArray(self.flags.last_text, []string{"get", "set", "new", "return", "export"}) { self.output.space_before_token = true } else if self.last_type == "TK_RESERVED" && self.flags.last_text == "default" && self.last_last_text == "export" { self.output.space_before_token = true } else { self.print_newline(false, false) } } else if self.last_type == "TK_OPERATOR" || self.flags.last_text == "=" { self.output.space_before_token = true } else if !self.flags.multiline_frame && (self.is_expression(self.flags.mode) || self.is_array(self.flags.mode)) { } else { self.print_newline(false, false) } } if utils.InStrArray(self.last_type, []string{"TK_COMMA", "TK_START_EXPR", "TK_EQUALS", "TK_OPERATOR"}) { if !self.start_of_object_property() { self.allow_wrap_or_preserved_newline(*current_token, false) } } if current_token.Type() == "TK_RESERVED" && utils.InStrArray(current_token.Text(), []string{"function", "get", "set"}) { self.print_token(*current_token, "") self.flags.last_word = current_token.Text() return } prefix := "NONE" if self.last_type == "TK_END_BLOCK" { if !(current_token.Type() == "TK_RESERVED" && utils.InStrArray(current_token.Text(), []string{"else", "catch", "finally"})) { prefix = "NEWLINE" } else { if utils.InStrArray(self.options["brace_style"].(string), []string{"expand", "end-expand"}) || (self.options["brace_style"].(string) == "none" && current_token.WantedNewLine()) { prefix = "NEWLINE" } else { prefix = "SPACE" self.output.space_before_token = true } } } else if self.last_type == "TK_SEMICOLON" && self.flags.mode == BlockStatement { prefix = "NEWLINE" } else if self.last_type == "TK_SEMICOLON" && self.is_expression(self.flags.mode) { prefix = "SPACE" } else if self.last_type == "TK_STRING" { prefix = "NEWLINE" } else if self.last_type == "TK_RESERVED" || self.last_type == "TK_WORD" || (self.flags.last_text == "*" && self.last_last_text == "function") { prefix = "SPACE" } else if self.last_type == "TK_START_BLOCK" { prefix = "NEWLINE" } else if self.last_type == "TK_END_EXPR" { self.output.space_before_token = true prefix = "NEWLINE" } if current_token.Type() == "TK_RESERVED" && utils.InStrArray(current_token.Text(), tokenizer.GetLineStarters()) && self.flags.last_text != ")" { if self.flags.last_text == "else" || self.flags.last_text == "export" { prefix = "SPACE" } else { prefix = "NEWLINE" } } if current_token.Type() == "TK_RESERVED" && utils.InStrArray(current_token.Text(), []string{"else", "catch", "finally"}) { if self.last_type != "TK_END_BLOCK" || self.options["brace_style"].(string) == "expand" || self.options["brace_style"].(string) == "end-expand" || (self.options["brace_style"].(string) == "none" && current_token.WantedNewLine()) { self.print_newline(false, false) } else { self.output.trim(true) if self.output.current_line.last() != "}" { self.print_newline(false, false) } self.output.space_before_token = true } } else if prefix == "NEWLINE" { if self.last_type == "TK_RESERVED" && self.is_special_word(self.flags.last_text) { self.output.space_before_token = true } else if self.last_type != "TK_END_EXPR" { if (self.last_type != "TK_START_EXPR" || !(current_token.Type() == "TK_RESERVED" && utils.InStrArray(current_token.Text(), []string{"var", "let", "const"}))) && self.flags.last_text != ":" { if current_token.Type() == "TK_RESERVED" && current_token.Text() == "if" && self.flags.last_text == "else" { self.output.space_before_token = true } else { self.print_newline(false, false) } } } else if current_token.Type() == "TK_RESERVED" && utils.InStrArray(current_token.Text(), tokenizer.GetLineStarters()) && self.flags.last_text != ")" { self.print_newline(false, false) } } else if self.flags.multiline_frame && self.is_array(self.flags.mode) && self.flags.last_text == "," && self.last_last_text == "}" { self.print_newline(false, false) } else if prefix == "SPACE" { self.output.space_before_token = true } self.print_token(*current_token, "") self.flags.last_word = current_token.Text() if current_token.Type() == "TK_RESERVED" && current_token.Text() == "do" { self.flags.do_block = true } if current_token.Type() == "TK_RESERVED" && current_token.Text() == "if" { self.flags.if_block = true } }