You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
2.7 KiB
Markdown
114 lines
2.7 KiB
Markdown
6 years ago
|
# call-signature [![Build Status](https://travis-ci.org/jamestalmage/call-signature.svg?branch=master)](https://travis-ci.org/jamestalmage/call-signature)
|
||
|
|
||
|
> Parse / Generate Method Signatures
|
||
|
|
||
|
|
||
|
## Install
|
||
|
|
||
|
```
|
||
|
$ npm install --save call-signature
|
||
|
```
|
||
|
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
```js
|
||
|
var signature = require('call-signature');
|
||
|
|
||
|
// parse a call signature definition
|
||
|
var parsed = signature.parse('t.equal(expected, actual, [message])');
|
||
|
|
||
|
console.log(parsed);
|
||
|
/* =>
|
||
|
{
|
||
|
callee: {
|
||
|
type: 'MemberExpression',
|
||
|
object: 't',
|
||
|
member: 'equal'
|
||
|
},
|
||
|
args: [
|
||
|
{
|
||
|
name: 'actual',
|
||
|
optional: false
|
||
|
},
|
||
|
{
|
||
|
name: 'expected',
|
||
|
optional: false
|
||
|
},
|
||
|
{
|
||
|
name: 'message',
|
||
|
optional: true
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
|
||
|
// Create signature definitions from the parsed object.
|
||
|
signature.generate(parsed);
|
||
|
|
||
|
//=> "t.equal(expected, actual, [message])"
|
||
|
```
|
||
|
|
||
|
|
||
|
## API
|
||
|
|
||
|
### callSignature.parse(input)
|
||
|
|
||
|
#### input
|
||
|
|
||
|
Type: `string`
|
||
|
|
||
|
A string that matches the call signature spec:
|
||
|
|
||
|
`object.member(required_arg1, required_arg2, [optional_arg1])`
|
||
|
`name(required_arg1, required_arg2, [optional_arg1])`
|
||
|
|
||
|
`object`, `member` and `name` can be any identifiers, but currently the callee must be a `MemberExpression` or an `Identifier` (that requirement may loosen in the future).
|
||
|
|
||
|
You can have any number of arguments. Optional arguments are denoted by placing the argument name between square `[`brackets`]`.
|
||
|
|
||
|
#### returns
|
||
|
|
||
|
A simple JS Object with three properties `callee` and `args`.
|
||
|
|
||
|
`callee` will be an object containing `type` property and its corresponding properties.
|
||
|
|
||
|
when matched against `MemberExpression` like `foo.bar(baz)`, `object` and `member` will be strings.
|
||
|
|
||
|
callee: {
|
||
|
type: 'MemberExpression',
|
||
|
object: 'foo',
|
||
|
member: 'bar'
|
||
|
}
|
||
|
|
||
|
when matched against `Identifier` like `foo(baz)`, `name` will be string.
|
||
|
|
||
|
callee: {
|
||
|
type: 'Identifier',
|
||
|
name: 'foo'
|
||
|
}
|
||
|
|
||
|
`args` will be an array. Each item of the array will have two properties `name`, and `optional`.
|
||
|
`name` will be the `string` name of the arg. `optional` will be a boolean value.
|
||
|
|
||
|
### callSignature.generate(parsed)
|
||
|
|
||
|
#### input
|
||
|
|
||
|
Type: `Object`
|
||
|
|
||
|
Must have the same definition as the return value from the `parse` method.
|
||
|
|
||
|
#### returns
|
||
|
|
||
|
A `string` signature definition that will parse to exactly the provided input.
|
||
|
|
||
|
## Related
|
||
|
|
||
|
- [escallmatch](https://www.npmjs.com/package/escallmatch) - Similar, with compatible string definitions to this library. Can be used to match AST Nodes to parsed signatures.
|
||
|
|
||
|
## License
|
||
|
|
||
|
MIT © [James Talmage](http://github.com/jamestalmage)
|