home

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit bcde528229aabe74de35596af61224b19f56e213
parent 0245beb3db3b7306041d50105a49c222538e3f03
Author: Vincent Demeester <vincent@sbr.pm>
Date:   Fri, 11 Sep 2020 16:02:11 +0100

tools/emacs: additional projectile project types

… starting by ko

Signed-off-by: Vincent Demeester <vincent@sbr.pm>

Diffstat:
Mtools/emacs/config/config-projects.el | 86+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 86 insertions(+), 0 deletions(-)

diff --git a/tools/emacs/config/config-projects.el b/tools/emacs/config/config-projects.el @@ -52,7 +52,93 @@ (def-projectile-commander-method ?c "Run `compile' in the project" (projectile-compile-project nil)) + (defun projectile-ko-project-p () + "Check if a project contains a .ko.yaml file." + (projectile-verify-file ".ko.yaml")) + (defun projectile-ko-with-config-project-p () + "Check if a project is a ko project and has a config/ folder full of yaml" + (and (projectile-ko-project-p) + (projectile-verify-file-wildcard "config/*.yaml"))) + (defun projectile-ko-configure-command () + "define a configure command for a ko project, depending on the opened file" + (cond + ((projectile-file-exists-p "hack/update-codegen.sh") "./hack/update-codegen.sh"))) + (defun projectile-ko-compile-command () + "define a compile command for a ko project, depending on the openend file " + (cond + ((eq major-mode 'go-mode) (projectile-ko-compile-command-go)) + ((eq major-mode 'yaml-mode) "yamllint .") + (t "go build -v ./...") + )) + (defun projectile-ko-compile-command-go () + "compile command for a ko project if in a go file" + (let* ((current-file (buffer-file-name (current-buffer))) + (relative-current-file (file-relative-name current-file (projectile-project-root))) + (relative-current-folder (file-name-directory relative-current-file))) + (message relative-current-file) + (cond + ((string-suffix-p "_test.go" relative-current-file) (format "go test -c -v ./%s" relative-current-folder)) + (t (format "go build -v ./%s" relative-current-folder))))) + (defun projectile-ko-test-command () + "define a test command for a ko project, depending on the openend file" + (cond + ((eq major-mode 'go-mode) (projectile-ko-test-command-go)) + (t "go test -v ./..."))) + + (defun projectile-ko-test-command-go () + "test command for a ko project if in a go file" + (let* ((current-file (buffer-file-name (current-buffer))) + (relative-current-file (file-relative-name current-file (projectile-project-root))) + (relative-current-folder (file-name-directory relative-current-file))) + (cond + ((string-suffix-p "_test.go" relative-current-file) (projectile-ko-command-go-test relative-current-file)) + (t (format "go test -v ./%s" relative-current-folder))))) + + (defun projectile-ko-command-go-test (current-file) + "get the command for a go test" + (cond + ((gotest-module-available-p) (projectile-ko-command-go-test-gotest current-file)) + (t (format "go test -v ./%s" current-file)))) + + (defun projectile-ko-command-go-test-gotest (current-file) + "get the command for a go test with gotest module enabled" + (message default-directory) + (let ((data (go-test--get-current-file-testing-data))) + (format "go test -run='%s' -v ./%s" data (file-name-directory current-file)))) + + (defun gotest-module-available-p () + "is go-test module available" + (fboundp 'go-test--get-current-file-data)) + (defun projectile-ko-run-command () + "define a run command for a ko project, depending on the openend file " + (cond + ((eq major-mode 'go-mode) (projectile-ko-run-command-go)) + ;; nothing by default ? + )) + + (defun projectile-ko-run-command-go () + "test command for a ko project if in a go file" + (let* ((current-file (buffer-file-name (current-buffer))) + (relative-current-file (file-relative-name current-file (projectile-project-root))) + (relative-current-folder (file-name-directory relative-current-file))) + (cond + ((string-prefix-p "cmd/" relative-current-file) (format "go run ./%s" relative-current-folder))))) + + (defun projectile-ko-package-command () + "define a package command for a ko project, depending on the openend file " + "ko resolve --push=false --oci-layout-path=/tmp/oci -f config") + (defun projectile-ko-install-command () + "define a install command for a ko project, depending on the openend file " + "ko apply -f config/") + (projectile-register-project-type 'ko #'projectile-ko-project-p + :project-file ".ko.yaml" ; might not be required + :configure 'projectile-ko-configure-command + :compile 'projectile-ko-compile-command + :test 'projectile-ko-test-command + :run 'projectile-ko-run-command + :package 'projectile-ko-package-command + :install 'projectile-ko-install-command) (projectile-mode)) (provide 'config-projects)