mirror of
				https://github.com/koalaman/shellcheck.git
				synced 2025-10-31 22:52:50 +08:00 
			
		
		
		
	Allow :+- in function names. :(){ :|:;};:, anyone?
This commit is contained in:
		| @@ -41,6 +41,7 @@ singleQuote = char '\'' | |||||||
| doubleQuote = char '"' | doubleQuote = char '"' | ||||||
| variableStart = upper <|> lower <|> oneOf "_" | variableStart = upper <|> lower <|> oneOf "_" | ||||||
| variableChars = upper <|> lower <|> digit <|> oneOf "_" | variableChars = upper <|> lower <|> digit <|> oneOf "_" | ||||||
|  | functionChars = variableChars <|> oneOf ":+-" | ||||||
| specialVariable = oneOf "@*#?-$!" | specialVariable = oneOf "@*#?-$!" | ||||||
| tokenDelimiter = oneOf "&|;<> \t\n\r" <|> nbsp | tokenDelimiter = oneOf "&|;<> \t\n\r" <|> nbsp | ||||||
| quotable = oneOf "|&;<>()$`\\ \"'\t\n\r" <|> nbsp | quotable = oneOf "|&;<>()$`\\ \"'\t\n\r" <|> nbsp | ||||||
| @@ -1402,6 +1403,7 @@ prop_readFunctionDefinition1 = isOk readFunctionDefinition "foo   (){ command fo | |||||||
| prop_readFunctionDefinition2 = isWarning readFunctionDefinition "function foo() { command foo --lol \"$@\"; }" | prop_readFunctionDefinition2 = isWarning readFunctionDefinition "function foo() { command foo --lol \"$@\"; }" | ||||||
| prop_readFunctionDefinition3 = isWarning readFunctionDefinition "function foo { lol; }" | prop_readFunctionDefinition3 = isWarning readFunctionDefinition "function foo { lol; }" | ||||||
| prop_readFunctionDefinition4 = isWarning readFunctionDefinition "foo(a, b) { true; }" | prop_readFunctionDefinition4 = isWarning readFunctionDefinition "foo(a, b) { true; }" | ||||||
|  | prop_readFunctionDefinition5 = isOk readFunctionDefinition ":(){ :|:;}" | ||||||
| readFunctionDefinition = called "function" $ do | readFunctionDefinition = called "function" $ do | ||||||
|     id <- getNextId |     id <- getNextId | ||||||
|     name <- try readFunctionSignature |     name <- try readFunctionSignature | ||||||
| @@ -1421,7 +1423,7 @@ readFunctionSignature = do | |||||||
|             whitespace |             whitespace | ||||||
|         parseProblemAt pos InfoC "Drop the keyword 'function'. It's optional in Bash but invalid in other shells." |         parseProblemAt pos InfoC "Drop the keyword 'function'. It's optional in Bash but invalid in other shells." | ||||||
|         spacing |         spacing | ||||||
|         name <- readVariableName |         name <- readFunctionName | ||||||
|         optional spacing |         optional spacing | ||||||
|         pos <- getPosition |         pos <- getPosition | ||||||
|         readParens <|> do |         readParens <|> do | ||||||
| @@ -1429,7 +1431,7 @@ readFunctionSignature = do | |||||||
|         return name |         return name | ||||||
|  |  | ||||||
|     readWithoutFunction = try $ do |     readWithoutFunction = try $ do | ||||||
|         name <- readVariableName |         name <- readFunctionName | ||||||
|         optional spacing |         optional spacing | ||||||
|         readParens |         readParens | ||||||
|         return name |         return name | ||||||
| @@ -1443,6 +1445,8 @@ readFunctionSignature = do | |||||||
|             g_Rparen |             g_Rparen | ||||||
|         return () |         return () | ||||||
|  |  | ||||||
|  |     readFunctionName = many1 functionChars | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| readPattern = (readNormalWord `thenSkip` spacing) `sepBy1` (char '|' `thenSkip` spacing) | readPattern = (readNormalWord `thenSkip` spacing) `sepBy1` (char '|' `thenSkip` spacing) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user