nosetest를 실행하는 간단한 vim 플러그인을 만들어보십시오.

4892 단어 vimscriptVim
이 기사는 아라타나 어드벤트 캘린더 2019의 16일째 기사입니다.



vim 역반년의 신쌀이 vim 플러그인을 만들어 보는 기사가 됩니다.
이상한 쓰는 방법 버리는 곳도 있을까 생각 합니다만, 지적하실 수 있으면 기쁩니다.

모처럼이므로 평소 사용할 수있는 것을 만들고 싶다는 것으로 테스트를 실행해주는 플러그인을 소재로하고 싶습니다.
필자는 모처럼이므로 테스트 코드를 작성한 후 아래와 같이 함수 하나를 지정하여 테스트를 실행합니다.
nosetests test_hoge.py:Hogeclass.test_func

이를 쉽게 수행하는 플러그인을 목표로합니다.

함수 이름 얻기



현재의 커서보다 전의 위치에서 최초로 검색에 걸린 개소의 함수명을 취득합니다.
function! Get_func_name()
  ?\vdef\stest_[a-z]*
  return split(split(getline('.'), " ")[1], "(")[0]
endfunction
?\vdef\stest_[a-z]*
  • ?: 앞으로 검색
  • \v:정규 표현식 사용
  • \s: 공백
  • def test_로 시작하는 함수 이름을 가져옵니다.

    클래스 이름 얻기



    마찬가지로 클래스 이름도 가져옵니다.
    function! Get_class_name()
      ?\vclass\s[a-zA-Z]*
      return split(split(getline('.'), " ")[1], "(")[0]
    endfunction
    

    테스트 명령 작성


    
    function! Create_test_command()
      let func_name = Get_func_name()
      let class_name = Get_class_name()
      let test_command = "nosetests"." ".expand("%:p").":".class_name.".".func_name." -v"
      return test_command
    endfunction
    
    

    아래와 같은 형태를 무리하게 만들고 있습니다.

    nosetests test_hoge.py:Hogeclass.test_func

    테스트 실행



    테스트를 실행하는 함수의 기술과 명령 모드로 실행할 수 있는 기술이 됩니다.
    ExecTest
    function! Exec_test()
      let test_command = Create_test_command()
      echo system(test_command)
    endfunction
    
    command! ExecTest call Exec_test()
    

    사용해보기



    만든 vimscript 파일을 로드합니다.



    ExecTest 커멘드를 사용할 수 있게 되므로 10행째에 커서를 아울러 사용해 보겠습니다.



    test_second가 실행 중입니다. 커서를 7행째에 맞추어 사용해 봅니다.



    test_first가 실행되었습니다.

    요약



    커서 아래 블록의 테스트 코드를 실행하는 플러그인을 만들어 보았습니다.
    검색으로 히트한 부분으로 이동하는 성질을 이용한 코드가 되고 있습니다만, 반대로 불편한 곳도 있습니다.
    가능하면 이동하지 않고 실행하고 싶기 때문에 개선해 나가고 싶습니다.

    좋은 웹페이지 즐겨찾기