-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Co-authored-by: ygqygq2 <ygqygq2@qq.com>
- Loading branch information
Showing
23 changed files
with
344 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
3 changes: 3 additions & 0 deletions
3
sampleWorkspace/function-comment-for-php/function-none-params-with-return.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
function funcName (): String { | ||
return "test" | ||
} |
7 changes: 7 additions & 0 deletions
7
sampleWorkspace/function-comment-for-php/function-none-params-with-return.result.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
/** | ||
* @description | ||
* @return default {String} | ||
*/ | ||
function funcName (): String { | ||
return "test" | ||
} |
3 changes: 3 additions & 0 deletions
3
sampleWorkspace/function-comment-for-php/function-none-params-without-return.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
function funcName () { | ||
return "test" | ||
} |
7 changes: 7 additions & 0 deletions
7
sampleWorkspace/function-comment-for-php/function-none-params-without-return.result.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
/** | ||
* @description | ||
* @return default {auto} | ||
*/ | ||
function funcName () { | ||
return "test" | ||
} |
3 changes: 3 additions & 0 deletions
3
sampleWorkspace/function-comment-for-php/function-optional-params-with-return.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
function funcName(int $a, $b = 5, ...$rest): int { | ||
return a + b; | ||
} |
10 changes: 10 additions & 0 deletions
10
sampleWorkspace/function-comment-for-php/function-optional-params-with-return.result.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
/** | ||
* @description | ||
* @return default {int} | ||
* @param $a {int} | ||
* @param [$b=5] {any} | ||
* @param [$rest] {any} | ||
*/ | ||
function funcName(int $a, $b = 5, ...$rest): int { | ||
return a + b; | ||
} |
3 changes: 3 additions & 0 deletions
3
sampleWorkspace/function-comment-for-php/function-with-params-with-return.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
function funcName(int $a, int $b): int { | ||
return a + b; | ||
} |
9 changes: 9 additions & 0 deletions
9
sampleWorkspace/function-comment-for-php/function-with-params-with-return.result.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
/** | ||
* @description | ||
* @return default {int} | ||
* @param $a {int} | ||
* @param $b {int} | ||
*/ | ||
function funcName(int $a, int $b): int { | ||
return a + b; | ||
} |
3 changes: 3 additions & 0 deletions
3
sampleWorkspace/function-comment-for-php/function-with-params-without-return.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
function funcName(int $a, int $b) { | ||
return a + b; | ||
} |
9 changes: 9 additions & 0 deletions
9
sampleWorkspace/function-comment-for-php/function-with-params-without-return.result.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
/** | ||
* @description | ||
* @return default {auto} | ||
* @param $a {int} | ||
* @param $b {int} | ||
*/ | ||
function funcName(int $a, int $b) { | ||
return a + b; | ||
} |
2 changes: 2 additions & 0 deletions
2
sampleWorkspace/function-comment-for-python/function-with-params-with-return.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
def add(a: Union[int, float], b: Union[int, float]) -> Union[int, float]: | ||
return a + b |
16 changes: 7 additions & 9 deletions
16
sampleWorkspace/function-comment-for-python/function-with-params-with-return.result.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,8 @@ | ||
/** | ||
""" | ||
* @description | ||
* @return default {int} | ||
* @param String {a} | ||
* @param int {b} | ||
*/ | ||
public int func(String a, int b) { | ||
System.out.println("test"); | ||
return 1; | ||
} | ||
* @return default {Union[int, float]} | ||
* @param a {Union[int, float]} | ||
* @param b {Union[int, float]} | ||
""" | ||
def add(a: Union[int, float], b: Union[int, float]) -> Union[int, float]: | ||
return a + b |
2 changes: 1 addition & 1 deletion
2
sampleWorkspace/function-comment-for-python/function-with-params-without-return.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
def add(a: Union[int, float], b: Union[int, float]) -> Union[int, float]: | ||
def add(a: Union[int, float], b: Union[int, float]): | ||
return a + b |
4 changes: 2 additions & 2 deletions
4
sampleWorkspace/function-comment-for-python/function-with-params-without-return.result.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,8 @@ | ||
""" | ||
* @description | ||
* @return default {Union[int, float]} | ||
* @return default {auto} | ||
* @param a {Union[int, float]} | ||
* @param b {Union[int, float]} | ||
""" | ||
def add(a: Union[int, float], b: Union[int, float]) -> Union[int, float]: | ||
def add(a: Union[int, float], b: Union[int, float]): | ||
return a + b |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,194 @@ | ||
import * as vscode from 'vscode'; | ||
|
||
import { ConfigManager } from '@/configuration/ConfigManager'; | ||
import { logger } from '@/extension'; | ||
import { LanguageFunctionCommentSettings } from '@/typings/types'; | ||
import { escapeRegexString } from '@/utils/str'; | ||
|
||
import { extractFunctionParamsString } from './extractFunctionParamsString'; | ||
import { FunctionParamsParser } from './FunctionParamsParser'; | ||
import { splitParams } from './php-splitParams'; | ||
import { FunctionParamsInfo, ParamsInfo, ReturnInfo } from './types'; | ||
|
||
function matchNormalFunction( | ||
functionDefinition: string, | ||
languageSettings: LanguageFunctionCommentSettings, | ||
): { | ||
matched: boolean; | ||
returnType: ReturnInfo; | ||
params: ParamsInfo; | ||
} { | ||
const { defaultReturnName = 'default', defaultReturnType = 'Null' } = languageSettings; | ||
const returnType: ReturnInfo = {}; | ||
let matched = false; | ||
let params: ParamsInfo = {}; | ||
|
||
// 提取参数括号里的字符串 | ||
const functionParamsStr = extractFunctionParamsString(functionDefinition); | ||
const functionParamsRegStr = escapeRegexString(functionParamsStr); | ||
const functionPattern = new RegExp( | ||
`function\\s*([&?]?[a-zA-Z0-9_]+)\\s*\\(${functionParamsRegStr}\\)\\s*(?::\\s*(.*))?\\s*{`, | ||
'm', | ||
); | ||
|
||
const match = functionPattern.exec(functionDefinition); | ||
|
||
if (match) { | ||
matched = true; | ||
const returnTypeStr = match[2] ? match[2].trim() : defaultReturnType; | ||
|
||
returnType[defaultReturnName] = { | ||
type: returnTypeStr, | ||
description: '', | ||
}; | ||
|
||
params = splitParams(functionParamsStr, languageSettings); | ||
} | ||
|
||
return { matched, returnType, params }; | ||
} | ||
|
||
function matchArrowFunction( | ||
functionDefinition: string, | ||
languageSettings: LanguageFunctionCommentSettings, | ||
): { | ||
matched: boolean; | ||
returnType: ReturnInfo; | ||
params: ParamsInfo; | ||
} { | ||
const { defaultReturnName = 'default', defaultReturnType = 'Null' } = languageSettings; | ||
const returnType: ReturnInfo = {}; | ||
let matched = false; | ||
let params: ParamsInfo = {}; | ||
|
||
// 提取参数括号里的字符串 | ||
const functionParamsStr = extractFunctionParamsString(functionDefinition); | ||
const functionParamsRegStr = escapeRegexString(functionParamsStr); | ||
const functionPattern = new RegExp(`fn\\s*\\(${functionParamsRegStr}\\)\\s*=>`, 'm'); | ||
|
||
const match = functionPattern.exec(functionDefinition); | ||
|
||
if (match) { | ||
matched = true; | ||
const returnTypeStr = match[2] ? match[2].trim() : defaultReturnType; | ||
|
||
returnType[defaultReturnName] = { | ||
type: returnTypeStr, | ||
description: '', | ||
}; | ||
|
||
params = splitParams(functionParamsStr, languageSettings); | ||
} | ||
|
||
return { matched, returnType, params }; | ||
} | ||
|
||
/** | ||
* @description | ||
* @return default {auto} | ||
*/ | ||
function matchFunction( | ||
functionDefinition: string, | ||
languageSettings: LanguageFunctionCommentSettings, | ||
): { matched: boolean; returnType: ReturnInfo; params: ParamsInfo } { | ||
const { defaultReturnName = 'default', defaultReturnType = 'Null' } = languageSettings; | ||
let returnType: ReturnInfo = { | ||
[defaultReturnName]: { type: defaultReturnType, description: '' }, | ||
}; | ||
let matched = false; | ||
let params: ParamsInfo = {}; | ||
|
||
const matchers = [matchNormalFunction, matchArrowFunction]; | ||
|
||
for (const matcher of matchers) { | ||
const result = matcher(functionDefinition, languageSettings); | ||
if (result.matched) { | ||
matched = result.matched; | ||
params = result.params; | ||
returnType = result.returnType; | ||
break; | ||
} | ||
} | ||
|
||
return { matched, returnType, params }; | ||
} | ||
|
||
export class PhpParser extends FunctionParamsParser { | ||
constructor(configManager: ConfigManager, languageId: string) { | ||
super(configManager, languageId); | ||
} | ||
|
||
private getFunctionString(document: vscode.TextDocument, startLine: number) { | ||
let functionDefinition = ''; | ||
let bracketCount = 0; // 大括号计数 | ||
let parenthesisCount = 0; // 小括号计数 | ||
|
||
for (let i = startLine; i < document.lineCount; i++) { | ||
const line = document.lineAt(i); | ||
functionDefinition += line.text + '\n'; | ||
|
||
for (const char of line.text) { | ||
if (char === '(') { | ||
parenthesisCount++; | ||
} else if (char === ')') { | ||
parenthesisCount--; | ||
} else if (char === '{') { | ||
bracketCount++; | ||
} else if (char === '}') { | ||
bracketCount--; | ||
} | ||
} | ||
|
||
if (bracketCount === 0 && parenthesisCount === 0) { | ||
break; | ||
} | ||
} | ||
|
||
return functionDefinition; | ||
} | ||
|
||
public getFunctionParamsAtCursor( | ||
activeEditor: vscode.TextEditor, | ||
languageSettings: LanguageFunctionCommentSettings = this.languageSettings, | ||
): FunctionParamsInfo { | ||
let functionParams: ParamsInfo = {}; | ||
let matchedFunction = false; | ||
let returnType: ReturnInfo = {}; | ||
const document = activeEditor.document; | ||
const cursorLine = activeEditor.selection.start.line; | ||
let startLine = cursorLine; | ||
// 如果光标所在行为空行或者注释,则从下一行开始 | ||
const cursorLineText = document.lineAt(cursorLine).text.trim(); | ||
if ( | ||
cursorLineText === '' || | ||
cursorLineText === '//' || | ||
cursorLineText === '#' || | ||
cursorLineText === '*/' | ||
) { | ||
startLine = cursorLine + 1; | ||
} | ||
|
||
const functionDefinition = this.getFunctionString(document, startLine); | ||
const { | ||
matched, | ||
returnType: returnTypeTmp, | ||
params, | ||
} = matchFunction(functionDefinition, languageSettings); | ||
if (matched) { | ||
matchedFunction = true; | ||
returnType = returnTypeTmp; | ||
functionParams = params; | ||
} | ||
|
||
if (!matchFunction) { | ||
logger.info(vscode.l10n.t('No function found at the cursor')); | ||
} | ||
|
||
return { | ||
matchedFunction, | ||
returnType, | ||
params: functionParams, | ||
insertPosition: new vscode.Position(startLine, 0), | ||
}; | ||
} | ||
} |
Oops, something went wrong.