github.com/amarpal/go-tools@v0.0.0-20240422043104-40142f59f616/cmd/keyify/go-keyify.el (about) 1 ;;; go-keyify.el --- keyify integration for Emacs 2 3 ;; Copyright 2016 Dominik Honnef. All rights reserved. 4 ;; Use of this source code is governed by a BSD-style 5 ;; license that can be found in the LICENSE file. 6 7 ;; Author: Dominik Honnef 8 ;; Version: 1.0.0 9 ;; Keywords: languages go 10 ;; URL: https://github.com/dominikh/go-keyify 11 ;; 12 ;; This file is not part of GNU Emacs. 13 14 ;;; Code: 15 16 (require 'json) 17 18 ;;;###autoload 19 (defun go-keyify () 20 "Turn an unkeyed struct literal into a keyed one. 21 22 Call with point on or in a struct literal." 23 (interactive) 24 (let* ((name (buffer-file-name)) 25 (point (point)) 26 (bpoint (1- (position-bytes point))) 27 (out (get-buffer-create "*go-keyify-output"))) 28 (with-current-buffer out 29 (setq buffer-read-only nil) 30 (erase-buffer)) 31 (with-current-buffer (get-buffer-create "*go-keyify-input*") 32 (setq buffer-read-only nil) 33 (erase-buffer) 34 (go--insert-modified-files) 35 (call-process-region (point-min) (point-max) "keyify" t out nil 36 "-modified" 37 "-json" 38 (format "%s:#%d" name bpoint))) 39 (let ((res (with-current-buffer out 40 (goto-char (point-min)) 41 (json-read)))) 42 (delete-region 43 (1+ (cdr (assoc 'start res))) 44 (1+ (cdr (assoc 'end res)))) 45 (insert (cdr (assoc 'replacement res))) 46 (indent-region (1+ (cdr (assoc 'start res))) (point)) 47 (goto-char point)))) 48 49 (provide 'go-keyify) 50 51 ;;; go-keyify.el ends here