Skip to content

Commit

Permalink
Merge pull request #33 from yaegassy/feat/getter-setter-action
Browse files Browse the repository at this point in the history
feat: getterSetter code action
  • Loading branch information
yaegassy committed May 30, 2022
2 parents 5a2abab + 61c01f0 commit 24850ab
Show file tree
Hide file tree
Showing 13 changed files with 1,220 additions and 3 deletions.
2 changes: 2 additions & 0 deletions .npmignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,5 @@ yarn-error.log
.github
.eslintrc.js
.prettierrc
coverage
_ref
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,9 @@ nmap <silent> gA <Plug>(coc-codeaction)
- `Open 'php.net' for 'xxxx'` | [DEMO](https://github.com/yaegassy/coc-intelephense/pull/6)
- `Add @intelephense-ignore-line` | [DEMO](https://github.com/yaegassy/coc-intelephense/pull/16)
- `Add @intelephense-ignore-next-line` | [DEMO](https://github.com/yaegassy/coc-intelephense/pull/16)
- `Insert PHP Getter` | [DEMO](https://github.com/yaegassy/coc-intelephense/pull/33#issuecomment-1140683583)
- `Insert PHP Setter` | [DEMO](https://github.com/yaegassy/coc-intelephense/pull/33#issuecomment-1140684502)
- `Insert PHP Getter & Setter` | [DEMO](https://github.com/yaegassy/coc-intelephense/pull/33#issuecomment-1140685034)

**Code Actions (Server side)**:

Expand Down
7 changes: 5 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@
"clean": "rimraf lib",
"watch": "node esbuild.js --watch",
"build": "node esbuild.js",
"prepare": "node esbuild.js"
"prepare": "node esbuild.js",
"test": "vitest run src/__tests__",
"test:watch": "vitest src/__tests__"
},
"prettier": {
"singleQuote": true,
Expand All @@ -45,7 +47,8 @@
"eslint-plugin-prettier": "^4.0.0",
"prettier": "^2.6.2",
"rimraf": "^3.0.2",
"typescript": "^4.6.4"
"typescript": "^4.6.4",
"vitest": "^0.13.0"
},
"activationEvents": [
"onLanguage:php"
Expand Down
48 changes: 48 additions & 0 deletions src/__tests__/fixtures/multipleNamespaceClass.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php

declare(strict_types=1);

namespace App\Dummy;

use App\Dummy\Logger;

class Sample1
{
private ?int $id;

private string $name = '';

/**
* @var string
*/
private $description;

private string|null $dummyCode = '';

private ?\DateTimeInterface $dummyDate = null;

/**
* @var ?string|\DateTimeInterface $multi1
* @var int $multi2
*/
private $dummyMulti1, $dummyMulti2;

public function __construct(
public int $prop1 = 0,
public array $prop2 = [],
) {
}

public function hello()
{
}
}

class Sample2
{
private int $increment;

public function example()
{
}
}
46 changes: 46 additions & 0 deletions src/__tests__/fixtures/multipleNonNamespaceClass.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php

declare(strict_types=1);

use App\Dummy\Logger;

class Sample1
{
private ?int $id;

private string $name = '';

/**
* @var string
*/
private $description;

private string|null $dummyCode = '';

private ?\DateTimeInterface $dummyDate = null;

/**
* @var ?string|\DateTimeInterface $multi1
* @var int $multi2
*/
private $dummyMulti1, $dummyMulti2;

public function __construct(
public int $prop1 = 0,
public array $prop2 = [],
) {
}

public function hello()
{
}
}

class Sample2
{
private int $increment;

public function example()
{
}
}
39 changes: 39 additions & 0 deletions src/__tests__/fixtures/standardNamespaceClass.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php

declare(strict_types=1);

namespace App\Dummy;

use App\Dummy\Logger;

class Sample
{
private ?int $id;

private string $name = '';

/**
* @var string
*/
private $description;

private string|null $dummyCode = '';

private ?\DateTimeInterface $dummyDate = null;

/**
* @var ?string|\DateTimeInterface $multi1
* @var int $multi2
*/
private $dummyMulti1, $dummyMulti2;

public function __construct(
public int $prop1 = 0,
public array $prop2 = [],
) {
}

public function hello()
{
}
}
37 changes: 37 additions & 0 deletions src/__tests__/fixtures/standardNonNamespaceClass.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

declare(strict_types=1);

use App\Dummy\Logger;

class Sample
{
private ?int $id;

private string $name = '';

/**
* @var string
*/
private $description;

private string|null $dummyCode = '';

private ?\DateTimeInterface $dummyDate = null;

/**
* @var ?string|\DateTimeInterface $multi1
* @var int $multi2
*/
private $dummyMulti1, $dummyMulti2;

public function __construct(
public int $prop1 = 0,
public array $prop2 = [],
) {
}

public function hello()
{
}
}
77 changes: 77 additions & 0 deletions src/__tests__/getterSetter.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import { it, expect } from 'vitest';
import fs from 'fs';
import path from 'path';

import * as getterSetterParser from '../parsers/getterSetter';

const FIXTURES_DIR = path.join(__dirname, 'fixtures');

it('getMethod | Classes contain namespaces', () => {
const file = fs.readFileSync(path.join(FIXTURES_DIR, 'standardNamespaceClass.php'));
const ast = getterSetterParser.getAst(file.toString());
const res = getterSetterParser.getMethods(ast.children);
expect(res.length).toBe(2);
});

it('getMethod | Classes not contain namespaces', () => {
const file = fs.readFileSync(path.join(FIXTURES_DIR, 'standardNonNamespaceClass.php'));
const ast = getterSetterParser.getAst(file.toString());
const res = getterSetterParser.getMethods(ast.children);
expect(res.length).toBe(2);
});

it('getMethod | Multiple classes contain namespace', () => {
const file = fs.readFileSync(path.join(FIXTURES_DIR, 'multipleNamespaceClass.php'));
const ast = getterSetterParser.getAst(file.toString());
const res = getterSetterParser.getMethods(ast.children);
expect(res.length).toBe(3);
});

it('getMethod | Multiple classes not contain namespace', () => {
const file = fs.readFileSync(path.join(FIXTURES_DIR, 'multipleNonNamespaceClass.php'));
const ast = getterSetterParser.getAst(file.toString());
const res = getterSetterParser.getMethods(ast.children);
expect(res.length).toBe(3);
});

it('getClassesNodes | Classes contain namespaces', () => {
const file = fs.readFileSync(path.join(FIXTURES_DIR, 'standardNamespaceClass.php'));
const ast = getterSetterParser.getAst(file.toString());
const res = getterSetterParser.getClassesNodes(ast.children);
expect(res.length).toBe(1);
});

it('getClassesNodes | Classes not contain namespaces', () => {
const file = fs.readFileSync(path.join(FIXTURES_DIR, 'standardNonNamespaceClass.php'));
const ast = getterSetterParser.getAst(file.toString());
const res = getterSetterParser.getClassesNodes(ast.children);
expect(res.length).toBe(1);
});

it('getClassesNodes | Multiple classes contain namespace', () => {
const file = fs.readFileSync(path.join(FIXTURES_DIR, 'multipleNamespaceClass.php'));
const ast = getterSetterParser.getAst(file.toString());
const res = getterSetterParser.getClassesNodes(ast.children);
expect(res.length).toBe(2);
});

it('getClassesNodes | Multiple classes not contain namespace', () => {
const file = fs.readFileSync(path.join(FIXTURES_DIR, 'multipleNonNamespaceClass.php'));
const ast = getterSetterParser.getAst(file.toString());
const res = getterSetterParser.getClassesNodes(ast.children);
expect(res.length).toBe(2);
});

it('getPropertiesWithClassInfo', () => {
const file = fs.readFileSync(path.join(FIXTURES_DIR, 'standardNamespaceClass.php'));
const ast = getterSetterParser.getAst(file.toString());
const res = getterSetterParser.getPropertiesWithClassInfo(ast.children);
expect(res.length).toBe(7);
});

it('getConstructorPropertiesWithClassInfo', () => {
const file = fs.readFileSync(path.join(FIXTURES_DIR, 'standardNamespaceClass.php'));
const ast = getterSetterParser.getAst(file.toString());
const res = getterSetterParser.getConstructorPropertiesWithClassInfo(ast.children);
expect(res.length).toBe(2);
});
Loading

0 comments on commit 24850ab

Please sign in to comment.