注釋模板的設置
-
默認配置:
在用戶首選項中搜索
fileheader
,默認配置為:"fileheader.customMade": {} // 頭部注釋 "fileheader.cursorMode": {} // 函數注釋
-
自定義模板:
-
在用戶設置中,搜索
fileheader
-
復制默認配置+修改配置
-
重啟編輯器生效
如上設置,生成注釋:
-
// 文件頭部注釋 快捷鍵:window:ctrl+alt+i,mac:ctrl+cmd+i
// 在注釋之前添加內容 /* /* * Author : OBKoro1 // 提供自動對齊注釋FilePath字段的功能:`wideSame` * Date : 2019-09-24 20:25:33 * LastEditors : OBKoro1 // 自動更新最后編輯人 * LastEditTime : 2019-12-16 21:16:08 // 自動更新最后編輯時間 * FilePath : /fileHead/test.js // 自動添加項目路徑 * 自定義信息, 自動移動光標到Description上 * 遇到換行符自動換行 */ // 在注釋之后添加內容 // 函數注釋 快捷鍵:window:ctrl+alt+t,mac:ctrl+cmd+t /** * @description: * @param {type} * @return: */
自動更新最后編輯時間、編輯人、文件路徑:
要開啟這個功能,需要在首選項設置中填寫對應的屬性:
"fileheader.customMade": {
"Date": "Do not edit", // 文件創建時間(不變)
"LastEditors": "OBKoro1", // 文件最后編輯者
"LastEditTime": "Do not edit", // 文件最后編輯時間
"FilePath": "Do not edit" // 文件在項目中的相對路徑 自動更新
}
// 不填寫對應屬性即關閉對應功能
圖案注釋
/*
* ......................................&&......................... * ....................................&&&.......................... * .................................&&&&............................ * ...............................&&&&.............................. * .............................&&&&&&.............................. * ...........................&&&&&&....&&&..&&&&&&&&&&&&&&&........ * ..................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.............. * ................&...&&&&&&&&&&&&&&&&&&&&&&&&&&&&................. * .......................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&......... * ...................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&............... * ..................&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&............ * ...............&&&&&@ &&&&&&&&&&..&&&&&&&&&&&&&&&&&&&........... * ..............&&&&&&&&&&&&&&&.&&....&&&&&&&&&&&&&..&&&&&......... * ..........&&&&&&&&&&&&&&&&&&...&.....&&&&&&&&&&&&&...&&&&........ * ........&&&&&&&&&&&&&&&&&&&.........&&&&&&&&&&&&&&&....&&&....... * .......&&&&&&&&.....................&&&&&&&&&&&&&&&&.....&&...... * ........&&&&&.....................&&&&&&&&&&&&&&&&&&............. * ..........&...................&&&&&&&&&&&&&&&&&&&&&&&............ * ................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&............ * ..................&&&&&&&&&&&&&&&&&&&&&&&&&&&&..&&&&&............ * ..............&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&....&&&&&............ * ...........&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&......&&&&............ * .........&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.........&&&&............ * .......&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...........&&&&............ * ......&&&&&&&&&&&&&&&&&&&...&&&&&&...............&&&............. * .....&&&&&&&&&&&&&&&&............................&&.............. * ....&&&&&&&&&&&&&&&.................&&........................... * ...&&&&&&&&&&&&&&&.....................&&&&...................... * ...&&&&&&&&&&.&&&........................&&&&&................... * ..&&&&&&&&&&&..&&..........................&&&&&&&............... * ..&&&&&&&&&&&&...&............&&&.....&&&&...&&&&&&&............. * ..&&&&&&&&&&&&&.................&&&.....&&&&&&&&&&&&&&........... * ..&&&&&&&&&&&&&&&&..............&&&&&&&&&&&&&&&&&&&&&&&&......... * ..&&.&&&&&&&&&&&&&&&&&.........&&&&&&&&&&&&&&&&&&&&&&&&&&&....... * ...&&..&&&&&&&&&&&&.........&&&&&&&&&&&&&&&&...&&&&&&&&&&&&...... * ....&..&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...........&&&&&&&&..... * .......&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&..............&&&&&&&.... * .......&&&&&.&&&&&&&&&&&&&&&&&&..&&&&&&&&...&..........&&&&&&.... * ........&&&.....&&&&&&&&&&&&&.....&&&&&&&&&&...........&..&&&&... * .......&&&........&&&.&&&&&&&&&.....&&&&&.................&&&&... * .......&&&...............&&&&&&&.......&&&&&&&&............&&&... * ........&&...................&&&&&&.........................&&&.. * .........&.....................&&&&........................&&.... * ...............................&&&.......................&&...... * ................................&&......................&&....... * .................................&&.............................. * ..................................&.............................. */
插件配置
參考模板設置的方式,找到配置項"fileheader.configObj"
,修改這個對象即可。
整體功能
所有的功能都在配置字段里面有簡單的描述,可以先看一下整體的配置功能,然后再本文檔中搜索對應的字段了解詳細用法。
配置:
1. 自定義語言注釋符號(可選項):
用戶自定義注釋符號
language自定義注釋形式須知:
- 此項配置是最高級別的,會覆蓋插件的語言注釋格式
- 任何語言/文件(新的語言、特殊的文件),用戶都可以設置對應的注釋符號,只要像上述栗子中的格式一樣即可。
- 還有一種場景:像issue中提到的,某些庫會對注釋格式有特殊要求,庫會對其識別、處理。插件標准的注釋格式並不能滿足需求,此時在
config.language
里添加一項配置即可。
此項配置的意義是:
以防以后項目不維護了,出現新的流行語言,注釋形式也不一樣了。用戶也可以自定以注釋的符號.
看到這里,我如此用心良苦,真的不點右上角賞我一個Star⭐️嗎?
language設置:
// 設置
"fileheader.configObj": { "language": { // 普通后綴文件 "js": { "head": "/$$", "middle": " $ @", "end": " $/", // 函數自定義注釋符號:如果有此配置 會默認使用 "functionSymbol": { "head": "/******* ", // 統一增加幾個*號 "middle": " * @", "end": " */" } }, // 一次匹配多種文件后綴文件 不用重復設置 "h/hpp/cpp": { "head": "/*** ", // 統一增加幾個*號 "middle": " * @", "end": " */" }, // 針對有特殊要求的文件如:test.blade.php "blade.php":{ "head": "<!--", "middle": " * @", "end": "-->", } }, }
language
下面的屬性可以是文件后綴,也可以是語言類型,比如test.js
,js
是文件后綴,javascript
是語言類型.- 推薦使用文件后綴來設置,這樣比較不容易出錯。
上述設置的注釋結果:
test.java
文件生成的注釋:
/$$ $ @Author: OBKoro1 $ @Date: 2019-01-19 $ @LastEditors: OBKoro1 $ @LastEditTime: 2019-01-19 $ @Description: 頭部注釋 $ @FilePath: /itemName/src/index.js // 自動生成文件路徑,在配置中搜索FilePath $/ /$$ $ @description: 函數注釋 $ @param {type} $ @return: $/
一次匹配多種文件后綴文件
/***
* Author : OBKoro1 * Date : 2019-05-13 15:54:32 * LastEditors : OBKoro1 * LastEditTime : 2020-02-14 22:04:52 * FilePath : /fileHead/test.h * Description : c++的h、hpp、cpp文件都使用一樣的注釋 * https://github.com/OBKoro1 **/
有特殊要求的文件注釋:
上面配置中的blade.php
,只會覆蓋以blade.php
為后綴的文件,不會影響到php
后綴的文件。 有些庫會對一些文件有特殊的要求,導致注釋也需要跟着改變,如該issue中所描述的test.blade.php
和test.php
里面是兩種內容。 注釋配套的:在注釋之前/之后添加內容、指定行數前添加注釋
test.blade.php
生成的注釋:
<!--
* @Author: OBKoro1 * @Date: 2019-10-20 16:37:49 * @LastEditors: OBKoro1 * @LastEditTime: 2019-10-20 16:49:09 * @FilePath: /xpdevtool/src/test.blade.php // 自動生成文件路徑,在配置中搜索FilePath * @Description: 描述 -->
默認注釋形式:
"fileheader.configObj": {
"annotationStr": {
"head": "/*", // 自定義注釋頭部
"middle": " * @", // 自定義注釋中間部分(注意空格,這也是最終生成注釋的一部分)
"end": " */", // 自定義注釋尾部
"use": false // 是否使用自定義注釋符號
}
}
這個配置是默認配置,如果使用的話(use:true),生成的注釋為:
/*
* @Author: OBKoro1
* @Github: https://github.com/OBKoro1
* @Date: 2018-12-12 18:50:10
* @LastEditors: OBKoro1
* @LastEditTime: 2018-12-13 15:54:05
* @Description: 頭部注釋
*/
/*
* @description:
* @param {type}
* @return: 函數注釋
*/
annotationStr
配置規則:
-
匹配
config.language
(用戶設置的自定義符號)1 -
匹配插件支持的語言
-
當上面兩種注釋形式都沒匹配到時,並且
use
選項為true,才會使用此項配置。
2. 自動添加文件頭部注釋:
該選項為了那些(比如我自己),老是忘記添加文件頭部注釋的同學而添加的,配合下方的頭部注釋黑名單使用更佳,媽媽再也不用擔心我忘記添加頭部注釋了!
"fileheader.configObj": {
"autoAdd": true, // 默認開啟
}
配置規則:
開啟該選項之后,插件會檢測當前保存的文件有沒有頭部注釋,如果沒有的話,將為自動添加頭部注釋(就像你按了頭部注釋的快捷鍵一樣)。
檢測文件沒有頭部注釋的規則:
-
前15行沒有進入該語言/自定義的注釋
-
進入注釋之后,注釋中沒有
LastEditors
、LastEditTime
、FilePath
、Date
這四個特殊字段 -
如果使用了自定義特殊字段,那么插件將改為檢測自定義的特殊字段。
也就是說你注釋模板中沒有這四個字段,那就不要開啟這項功能,因為會無限添加頭部注釋(一直檢測不到頭部文件注釋,一直自動添加)。
在本插件中,這四個設置都有其自己的功能,所以以這四個字段為檢測標准
滿足上述兩個條件,插件將視該文件沒有頭部注釋,將在保存文件時自動為其添加頭部注釋。
autoAlready:只讓支持的語言,自動添加頭部注釋
autoAlready
: 自動添加頭部注釋:只允許插件支持的語言,以及用戶通過language
選項自定義的注釋。
"fileheader.configObj": {
"autoAdd": true, // 自動添加頭部注釋開啟才能自動添加
"autoAlready": true, // 默認開啟
}
為什么增加這項配置?
-
像
.json
文件這種類型的文件,文件不能添加注釋 -
有一些語言,插件沒有支持,添加默認注釋,並不適配,導致問題。 (可以通過
language
選項添加自定義注釋來解決。)
將autoAlready關閉,即給所有文件自動添加頭部注釋,選擇權在你們手上。
自動添加文件頭部注釋限制
自動添加頭部注釋文件白名單
"fileheader.configObj": { "supportAutoLanguage": [ ] // 設置過后只有該數組里面的文件 才會自動添加頭部注釋 }
規則與黑名單prohibitAutoAdd
相同,該功能是為了防止語言實在太多,黑名單設置不過來,提供僅支持特定的幾種特定語言的自動添加。
自動添加頭部注釋黑名單
"fileheader.configObj": { "prohibitAutoAdd": [ "json", "md" ] // 禁止.json .md文件,自動添加頭部注釋 }
插件黑名單的參數接收的是文件后綴,當文件后綴匹配跟黑名單數組內的元素匹配時,該文件不會自動添加頭部注釋。
自動添加頭部注釋,本身是一個相當不錯的功能,但因為有些文件不適合自動添加注釋,比如.json
文件是不能有注釋的,在這些不適宜的情景下,自動添加會被關閉。
很多人在關閉之后,就會忘記再打開了,這個功能可以很好的解決這個問題,有了這個功能,相信各位以后的注釋習慣會越來越好。
自動添加頭部注釋項目黑名單
場景: 某些項目沒有推廣頭部注釋,然后leader/團隊成員反感這種行為時,使用該功能。
"fileheader.configObj": { "prohibitItemAutoAdd": [ "test_koro", "test_koro2" ] // 禁止test_kro/test_koro2項目自動添加頭部注釋 }
-
要禁止項目的全稱, 整個項目禁止自動添加頭部注釋, 可以使用快捷鍵自行添加頭部注釋。
-
如
test_koro
項目, 需要以test_koro
為根目錄打開項目,才可以禁止自動添加,如果將其包含,或者打開該項目的一部分則不會被禁止 -
電腦中如果有其他項目也是完全一樣的項目名,那么以該項目為根目錄時,也會被禁止自動添加頭部注釋。(這種場景比較少見)
文件超過一定行數不再自動添加頭部注釋
"fileheader.configObj": { "autoAddLine": 100 // 默認文件超過100行就不再自動添加頭部注釋 }
文件夾或文件名禁止自動添加頭部注釋
插件會對地址進行切割,如果完全匹配到文件夾或者文件名字符串則禁止添加。
"fileheader.configObj": { "folderBlacklist": [ "node_modules", "文件夾或文件名禁止自動添加頭部注釋", // "webpack.config.js" // 可以禁止某些文件自動添加注釋 ] }
只允許文件自動添加頭部注釋一次:
如果某個文件曾經自動添加過頭部注釋,那么插件會記錄該文件的路徑,在這次VsCode編輯器關閉前,都將不再允許該文件自動添加頭部注釋。
有時候我們並不希望該文件自動添加頭部注釋,刪除也沒有用,它會一直手動添加,該功能就是為了用於防止這種情況的。
FilePath:文件相對於項目的路徑
"fileheader.customMade": { "Author": "OBKoro1", "Date": "Do not edit", "LastEditors": "OBKoro1", "LastEditTime": "Do not edit", "FilePath": "Do not edit" // 增加此項配置即可 }
FilePath
在4.6.0
+將會自動更新,防止因為文件被移動、重命名導致文件路徑錯誤。- 將
FilePath
設為no item name
可以去掉項目名稱。 - 將
FilePath
設為only file name
可以去掉路徑,只展示文件名。 - 將
FilePath
設為only file name without ext
可以去掉路徑,去掉文件后綴,只展示文件名。 - 如果想給字段換一個名字,可以在
specialOptions
中修改它。 - 字段的值為:生成頭部注釋時,文件相對於當前VsCode窗口打開的文件夾的路徑(如下所示)。
- 該配置的作用在於:項目的文件夾層級較為復雜或者項目中存在大量相同的文件名(比如一大堆
index.js
)
比如:
/*
* Author: OBKoro1 * Date: 2019-10-20 15:43:37 * LastEditTime: 2019-10-20 17:37:45 * FilePath: /文件夾名稱/src/index.js // 默認帶上項目名稱 * FilePath: /src/index.js // "FilePath": "no item name" 去掉項目名稱 * FilePath: index.js // "FilePath": "only file name" 只剩文件名 * FilePath: index // "FilePath": "only file name without ext" 去掉路徑,去掉文件后綴,只展示文件名 */
filePathColon: 修改路徑分隔符
配置示例:
"fileheader.configObj": { "filePathColon": "\\\\" // \ 路徑要轉義 所以要寫兩遍 }
old: FilePath: /文件夾名稱/test.js now: FilePath: \\文件夾名稱\\test.js
頭部注釋等寬設置wideSame
"fileheader.configObj": { "wideSame": false, // 設置為true開啟 "wideNum": 13 // 字段長度 默認為13 }
開啟效果:
wideNum為13長度充足,每個字段都有空格:
/*
* Author : OBKoro1 * Date : 2019-09-24 20:25:33 * LastEditors : OBKoro1 * LastEditTime : 2019-12-16 21:16:08 * FilePath : /fileHead/test.js */
之前沒有對齊的注釋 插件也會更新它的修改時間, 效果如下
/*
* @Author: OBKoro1 * @Date: 2019-09-24 20:25:33 * LastEditors : OBKoro1 // 字段會填充空格 * LastEditTime : 2019-12-17 19:43:01 // 字段會填充空格 * @FilePath: /fileHead/test.js */
wideNum為9,字段長度超出會導致長度不齊
/*
* Author : OBKoro1 * Date : 2019-09-24 20:25:33 * LastEditors: OBKoro1 * LastEditTime: 2019-12-17 10:35:19 * FilePath : /fileHead/test.js */
函數注釋等寬設置
"fileheader.configObj": { "functionWideNum": 0 // 0 默認關閉 設置一個正整數即可開啟 比如12 }
開啟效果
/**
* @description 設置為13 * @param {*} * @return {*} */ /** * @description 設置為0 關閉 * @param {*} * @return {*} */
新建文件自動添加頭部注釋
"fileheader.configObj": { "createHeader": true // 默認打開 }
插件匹配到language
自定義語言注釋配置、自定義注釋配置時才會自動添加頭部注釋,如果匹配不到不會使用默認注釋。
如果該文件被添加進黑名單,將不會自動添加頭部注釋。
這樣在創建一些項目配置文件時,不會出現不必要的注釋。
3. 頭部注釋第幾行插入:
"fileheader.configObj": { "headInsertLine": { "php": 2, // php后綴的文件,在第二行插入文件頭部注釋 "*": 3, // 所有文件都在第3行插入注釋(除了php) } }
規則:
- 默認都是將頭部注釋插入到第一行
- 格式就是上面演示的那樣。
- 插入行數問題:文件行數不足設置的行數,注釋將會插入到最后一行(下面有演示)
演示:
原文件(兩行):
<?php
?>
頭部注釋插入到第二行:
<?php
/*
* @Author: OBKoro1
* @Github: https://github.com/OBKoro1
* @Date: 2018-12-21 10:49:35
* @LastEditors: OBKoro1
* @LastEditTime: 2018-12-21 17:06:07
* @Description:
*/
?>
頭部注釋插入到第3行,行數不足的演示:
<?php
?>/*
* @Author: OBKoro1
* @Github: https://github.com/OBKoro1
* @Date: 2018-12-21 10:49:35
* @LastEditors: OBKoro1
* @LastEditTime: 2018-12-21 17:12:46
* @Description:
*/
4. Date字段時間選項:
當前時間/創建文件時間:
"fileheader.configObj": {
"createFileTime": true, // 設為false更改為當前生成注釋的時間
}
頭部注釋:createFileTime
默認為此文件的創建時間,將該字段設為false即可更改為當前注釋的插入時間。
函數注釋:V3.0 函數注釋也支持Date字段了,該字段會生成函數注釋插入的時間。
時間格式化:
"fileheader.configObj": { "dateFormat": "YYYY-MM-DD HH:mm:ss" // 默認格式 }
默認格式:
* @Date: 2019-01-19 21:29:11
修改配置,可以精確自定義時間的格式,配置參數來自第三方:moment.js
的format方法的參數。
比如:
"fileheader.configObj": { "dateFormat": "YYYY-MM-DD HH:mm:ss ZZ" // 輸出:2019-05-20 15:42:07 +0800 }
PS: 該功能將影響所有時間字段。
5. 頭部注釋前面插入內容:
"fileheader.configObj": { "beforeAnnotation": { "py": "#!/usr/bin/env python\n# coding=utf-8", // py文件默認,可修改 "*": "\n" // 所有文件的頭部注釋都在前面增加一個換行(除了py) } }
規則:
- 填寫對應文件后綴,如
py
。 - 要添加的內容直接寫進去就可以了,換行符
\n
如這兩個issue、issue中提到的,python
文件頭部還需要類似下面兩行必備內容。
如上設置,最后在test.py
文件中按頭部注釋的快捷鍵出現的效果是:
#!/usr/bin/env python
# coding=utf-8
'''
@Author: OBKoro1
@Date: 2019-02-18 13:03:37
@LastEditors: OBKoro1
@LastEditTime: 2019-02-19 12:26:24
'''
頭部注釋后面插入內容:
設置位置如下,其他規則跟上方《頭部注釋前面插入內容》的規則一樣。
"fileheader.configObj": { "afterAnnotation": { "js": "// js文件頭部注釋之后的內容", "*": "\n" // 所有文件新增頭部注釋之后都空一行(除了js) } // 需要特殊定制的文件后綴 }
6. 特殊字段允許自定義
目前在插件中有五個特殊字段:Date
、LastEditTime
、LastEditors
、Description
、FilePath
類似Date
字段,在靜態博客中有自己定義的字段(如:updated_at
),不是Date
。
你可以像下面這樣設置:
"fileheader.customMade":{ "Author": "OBKoro1", "Date": "Do not edit", "LastEditTime": "Do not edit", "LastEditors": "Do not edit", "FilePath": "Do not edit", "Description": "" }, "fileheader.configObj": { "specialOptions":{ "Date": "since", "LastEditTime": "lastTime", "LastEditors": "LastAuthor", "Description": "message", "FilePath": "文件相對於項目的路徑" "param": "paramAlias", // 函數注釋parm參數別名 "return": "returnAlias", // 函數注釋return參數別名 } }
- 默認為空對象,也就是不更改特殊字段。
- 你可以只設置一個對應的字段,也可都設置。
- 當你更改了特殊字段,那些使用老的特殊字段的注釋,插件也進行過處理了,可以放心食用。
- 注意:如果是團隊使用,需要團隊成員一起修改。否則將不會自動更新最后編輯時間/最后編輯人以及打開自動添加注釋的話,會檢測不出來新的特殊字段,導致插件自動添加頭部注釋。
最后效果是:
/*
* @Author: OBKoro1 * @since: 2019-05-13 15:54:32 * @lastTime: 2019-08-08 16:25:22 * @LastAuthor: Do not edit * @文件相對於項目的路徑: /testItem/src/index.js * @message: */ /** * description: * param2 [type] param字段重命名 * return2 [type] return字段重命名 */ function test(a, b) {}
7. 在注釋中輸出一段自定義信息
在customMade
/cursorMode
中設置特殊屬性custom_string_obkoro1
~custom_string_obkoro100
,用來輸入一段自定義信息,設置如下:
PS:還有兩個特殊字段custom_string_obkoro1_copyright
(版權)、custom_string_obkoro1_date
(時間)
"fileheader.customMade": { "custom_string_obkoro1_date": "Do not edit", // 不帶Date前綴的時間 "Github": "https://github.com/OBKoro1", "custom_string_obkoro2": "custom_string_obkoro1~custom_string_obkoro100都可以輸出自定義信息", "Author": "OBKoro1", "custom_string_obkoro1_copyright": "Copyright ${now_year} OBKoro1, All Rights Reserved. ", // 版權聲明 保留所有權利 自動替換年份 "custom_string_obkoro1": "可以輸入預定的版權聲明、個性簽名、空行等" }
在test.js
文件中的效果:
/**
* 2020-07-03 14:50:17 // 不帶Date字段的時間 * @Github: https://github.com/OBKoro1 * custom_string_obkoro1~custom_string_obkoro100都可以輸出自定義信息 * @Author: OBKoro1 * Copyright 2020 OBKoro1, All Rights Reserved // 版權字段 * 可以輸入預定的版權聲明、個性簽名、空行等 // 使用atSymbol字段可以去掉@ */
8. 遇到換行添加注釋符號
遇到\r\n
、\n
、\r
換行情況時,自動在下一行開頭添加應該有的注釋標識符,設置如下:
// 設置
"fileheader.customMade": { "Author": "OBKoro1", "test": "哈哈哈哈\n啦啦啦\r\n黑呵呵呵" } // 效果 a.js /* * @Author: OBKoro1 * @---aaaa: 哈哈哈哈 * 啦啦啦 * 黑呵呵呵 */
為避免出現問題,插件提供了一個開關來關閉它:
"fileheader.configObj": { "switch": { "newlineAddAnnotation": true // 默認開啟 } }
移動光標到Description :
所在行
"fileheader.configObj": { "moveCursor": true // 移動光標到`Description :`所在行 }
- 該選項默認開啟
- 如果視圖中沒有注釋,將會移動視圖到頂部。
- 必須在
customMade
/cursorMode
中有Description
選項,沒有該選項的話,將不生效。 Description
可在configOptions.specialOptions中修改。
自定義注釋中的艾特和冒號:
如下放注釋中的@
和:
,有幾個issue中都提到了注釋中的@
和:
符號希望能夠自定義
/*
* @Author: OBKoro1 * @Github: https://github.com/OBKoro1 * @Date: 2019-05-13 15:54:32 * @LastEditors: OBKoro1 * @LastEditTime: 2019-05-13 15:54:32 * @Description: */
增加了以下四項配置,用以修改所有文件的@
、:
以及單獨修改某個文件類型的@
和:
:
"fileheader.configObj": { "atSymbol": [ "@", "@"], // 所有文件的頭部注釋和函數注釋的默認值 "atSymbolObj": { "js": ["", "@"], // .js文件的頭部注釋@符號去掉,所有文件的函數注釋默認為@ "java": [ "#", "@"] // .java文件 頭部注釋@改為#, 函數注釋還是@ }, "colon": [ ": ", ": " ], // 所有文件的頭部注釋和函數注釋的默認值 "colonObj": { "js": [ " ", ": " ], // .js文件 頭部注釋去掉: 留一個空格 函數注釋保留冒號 "java": [ ": ", "$"] // .java文件 頭部注釋是冒號 函數注釋是$ } }
隱藏插件拋出的錯誤通知
"fileheader.configObj": { "showErrorMessage": false // 默認不顯示錯誤通知 用於debugger }
錯誤日志
"fileheader.configObj": { "writeLog": false // 默認不生成錯誤日志 }
開啟錯誤日志后,每次重啟vscode如果有報錯都將會清空日志,這是防止日志過多的情況。
設置錯誤日志生成地址
按快捷鍵ctrl+p,調出命令行面板,輸入以下命令即可選擇文件夾設置日志地址。
>空格fileheader.errPathSet
單個文件保存時進行diff檢查
每次保存之后,會進行一次diff檢查, 如果文件只變更了
LastEditors
/LastEditTime
,該文件將會回滾到本地倉庫的最新版本.
"fileheader.configObj": { "CheckFileChange": false // 默認關閉 }
使用場景:
對文件進行修改之后又撤銷,但是LastEditors
和LastEditTime
已經變更了,在提交代碼的時候很容易忘記恢復它,導致無意義的提交,反正我很經常遇到這個問題。
運行邏輯:
- 檢測VSCode當前打開的文件夾的根目錄是夠有
.git
文件夾, 沒有的話,則退出 - 獲取觸發保存文件的diff,進行diff檢查。
- 檢測當只有
LastEditors
和LastEditTime
變更,其他任何變更都沒有的情況下。 - 將該文件回滾到本地倉庫的最新版本。
關於功能的安全性:
鑒於之前該功能采用pre-commit
的方案,造成過嚴重的BUG,新功能的破壞性會小很多,並且文件很容易就可以恢復:
目前該功能只針對單個文件進行操作,影響范圍會比較小,並且挽回方式也比較簡單快捷。
假如,我是說假如,再有出現文件被回滾的情況,因為這個操作是即時的,並且在每次保存都會觸發,如果誤將文件回滾了,在該文件上撤銷一次即可將文件內容恢復恢復。
useWorker 區分工作區配置模板
"fileheader.configObj": { "useWorker": false // 默認關閉 }
如該issue通過該設置我們可以區分工作區設置的模板和用戶設置的通用模板,默認情況下是合並工作區設置和用戶設置的字段。
頭部注釋customMade
和函數注釋cursorMode
都可以區分。
函數注釋自動提取函數的參數
開啟關閉自動提取添加函數參數
"fileheader.configObj": { "openFunctionParamsCheck": true // 默認開啟 }
使用效果:
目前支持函數參數自動提取的文件后綴:
自定義語言支持函數參數提取
在自定義語言的對象中使用functionParams
字段,可以獲取對應語言的解析函數參數的邏輯。
如果解析的邏輯不符合自定義語言的語法,那可以嘗試其他語言的解析邏輯,應該會有合適。
"fileheader.configObj": { // 自定義語言 "language": { "tsx": { // jsx后綴的文件 "head": "/**", "middle": " * ", "end": "*/", "functionParams": "typescript" // 使用ts語言的解析邏輯 } } }
使用下列對象的key
,即可獲取對應語言解析函數參數的邏輯。
// 支持函數注釋的語言
const supportLanguage = { javascript: 'function-js.js', javascriptreact: 'function-js.js', // react jsx vue: 'function-js.js', // vue html: 'function-js.js', // html typescript: 'function-ts.js', // ts typescriptreact: 'function-ts.js', // react tsx java: 'function-java.js', // java python: 'function-python.js', // py rust: 'function-rust.js', // rust go: 'function-go.js', // go c: 'function-c.js', cpp: 'function-c.js', php: 'function-php.js', solidity: 'function-solidity.js' // 智能合約的語言 }
函數內生成函數注釋
設為true開啟函數內生成函數注釋,下面是設置示例:
"fileheader.configObj": { "cursorModeInternalAll": { "ts": true, // ts文件后綴是函數內生成函數注釋 "js": false, // js文件后綴是在函數外生成函數注釋 "python": true, // python語言類型文件時在函數內生成函數注釋 "defaultSetting": false // 默認是在函數外生成注釋 } }
js文件示例示例:
/**
* @description: 未開啟:注釋在函數外 * @param {*} a * @param {*} b * @return {*} */ function test(a, b) { } // 某些語言的注釋是寫在函數內的 function test(a, b) { /** * @description: 開啟后:注釋在函數內 * @param {*} a * @param {*} b * @return {*} */ }
函數注釋空格縮進
"fileheader.configObj": { "functionBlankSpaceAll": {} // 默認不縮進 }
// 配置示例
"fileheader.configObj": { // ... 其他配置 // "functionBlankSpaceAll": {} // 默認為空對象 默認值為0 不縮進 "functionBlankSpaceAll": { // "js": 2, // 單獨設置文件:js文件后綴 縮進兩格 "python": 4, // 設置語言:python語言類型 函數注釋空格縮進4格 "defaultSetting": 0 // 不設置 默認值為0 }, }
示例:
// js 不設置 默認不縮進
/** * @description defaultSetting: 0 默認不縮進 * @param a * @param b * @return {*} */ async function test(a, ...b) {}
# py縮進四格
def printinfo( arg1, **vardict ): ''' @description: python語言類型縮進4格 @param arg1 [type] @param vardict [object] @return [type] '''
函數參數外形自定義
"fileheader.configObj": { "functionParamsShape": ["{", "}"] // "functionParamsShape": "no type" // 不需要參數類型 }
示例:
// functionParamsShape: [ "{", "}"] // 默認值
/** * @description: type包圍起來的大括號: {} * @param {number} c * @param {string} b * @return {type} */ function test2(c: number, b: string = '2') {} // functionParamsShape: [ "[", "]"] /** * @description: * @param [number] c * @param [string] b * @return [type] */ function test2(c: number, b: string = '2') {} // functionParamsShape: "no type" /** * @description: * @param c * @param b * @return */ function test2(c: number, b: string = '2') {}
參數沒有類型時的默認值
"fileheader.configObj": { "functionTypeSymbol": "*" }
// "functionTypeSymbol": "*" // 默認值
/** * @description: * @param {*} axiosMethods * @param {*} apiLink * @param {*} opts * @param {*} fileName * @return {*} */ export const download = async (axiosMethods, apiLink, opts, fileName) => {}; // "functionTypeSymbol": "type" /** * @description: * @param {type} axiosMethods * @param {type} apiLink * @param {type} opts * @param {type} fileName * @return {type} */ export const download = async (axiosMethods, apiLink, opts, fileName) => {};
參數類型 和 參數的位置自定義
"fileheader.configObj": { "typeParamOrder": "type param" }
// "typeParamOrder": "type param" // 默認值
/** * @description: 類型在前面 參數在后面 * @param {type} axiosMethods * @param {type} apiLink * @param {type} opts * @param {type} fileName * @return {type} */ export const download = async (axiosMethods, apiLink, opts, fileName) => {}; // "typeParamOrder": "param type" /** * @description: 參數在前面 類型在后面 * @param axiosMethods {type} * @param apiLink {type} * @param opts {type} * @param fileName {type} * @return {type} */ export const download = async (axiosMethods, apiLink, opts, fileName) => {};
自定義取消注釋的head和end部分
注意該配置只在自定義語言注釋language
也配置了,才會生效
// 配置示例
"fileheader.configObj": { // ... 其他配置 // "customHasHeadEnd": {} // 默認為空對象 默認都有head和end // 不設置自定義配置language無效 "customHasHeadEnd": { "js": "cancel head and function", // 頭部注釋和函數注釋均不取消head和end - 單獨設置文件 js文件后綴 "ts": "cancel function", // 函數注釋不帶有head和end-ts文件后綴 "python": "cancel head", // 頭部注釋不帶有head和end // "defaultSetting": '' // 不設置 默認所有文件都有head和end }, }
示例:
// 配置:
"fileheader.configObj": { "language": { "js": { "head": "這里無效", "middle": "// ", // 設置中間部分即可 "end": "這里無效" }, }, // 不設置自定義配置language無效 "customHasHeadEnd": { "js": "cancel head and function", // 頭部注釋和函數注釋均不取消head和end - 單獨設置文件 js文件后綴 } }
// Author : OBKoro1
// Date : 2021-03-27 18:16:43 // LastEditors : OBKoro1444 // LastEditTime : 2021-07-26 15:04:49 // FilePath : test.js // description : 頭部注釋效果 需要設 // koroFileheader VSCode插件 // Copyright (c) 2021 by OBKoro1, All Rights Reserved. // description: 函數注釋效果 // param option [type] // return [type] function updateFillBuilderYAML(option) {}
節流時間自定義, 自定義同一個文件觸發保存的頻率
這個配置的意義在於,通過減少觸發更新注釋的方式,降低撤銷更改重新保存后,導致被撤銷內容被注釋的更新所覆蓋的問題 #358。
"fileheader.configObj": { "throttleTime": 60000 // 對同一個文件 需要過1分鍾再次修改文件並保存才會更新注釋 }
一個文件第一次修改內容並保存后,會觸發更新注釋的最后編輯人,最后編輯時間。
之后在該文件上進行修改,並且再次保存后,是否更新注釋,取決於throttleTime
所設定的時間。
當:(當前時間 - 上次執行事件 > throttleTime設定的時間),即觸發更新注釋函數。
PS:插件會保存最近30個文件的最后更新注釋的時間,並使用LRU算法,在每次更新注釋后,會將該文件更新成最新的。