Skip to content

Commit

Permalink
fix: also use .prettierignore from current working directory (prettie…
Browse files Browse the repository at this point in the history
  • Loading branch information
jantimon committed Jan 15, 2019
1 parent 157d4b1 commit 43c3905
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 5 deletions.
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -108,4 +108,4 @@ For example `pretty-quick --since HEAD` will format only staged files.

## Configuration and Ignore Files

`pretty-quick` will respect your [`.prettierrc`](https://prettier.io/docs/en/configuration), [`.prettierignore`](https://prettier.io/docs/en/ignore#ignoring-files), and [`.editorconfig`](http://editorconfig.org/) files, so there's no additional setup required. Configuration files will be found by searching up the file system. `.prettierignore` files are only found from the working directory that the command was executed from.
`pretty-quick` will respect your [`.prettierrc`](https://prettier.io/docs/en/configuration), [`.prettierignore`](https://prettier.io/docs/en/ignore#ignoring-files), and [`.editorconfig`](http://editorconfig.org/) files, so there's no additional setup required. Configuration files will be found by searching up the file system. `.prettierignore` files are only found from the repository root and the working directory that the command was executed from.
21 changes: 20 additions & 1 deletion src/__tests__/scm-git.test.js
Expand Up @@ -11,12 +11,13 @@ afterEach(() => {
jest.clearAllMocks();
});

const mockGitFs = (additionalUnstaged = '') => {
const mockGitFs = (additionalUnstaged = '', additionalFiles = {}) => {
mock({
'/.git': {},
'/raz.js': 'raz()',
'/foo.js': 'foo()',
'/bar.md': '# foo',
...additionalFiles,
});
execa.sync.mockImplementation((command, args) => {
if (command !== 'git') {
Expand Down Expand Up @@ -241,4 +242,22 @@ describe('with git', () => {
expect(onExamineFile).not.toHaveBeenCalledWith('./foo.js');
expect(onExamineFile).not.toHaveBeenCalledWith('./bar.md');
});

test('ignore files matching patterns from the repositories root .prettierignore', () => {
const onWriteFile = jest.fn();
mockGitFs('', {
'/.prettierignore': '*.md',
});
prettyQuick('/sub-directory/', { since: 'banana', onWriteFile });
expect(onWriteFile.mock.calls).toEqual([['./foo.js']]);
});

test('ignore files matching patterns from the working directories .prettierignore', () => {
const onWriteFile = jest.fn();
mockGitFs('', {
'/sub-directory/.prettierignore': '*.md',
});
prettyQuick('/sub-directory/', { since: 'banana', onWriteFile });
expect(onWriteFile.mock.calls).toEqual([['./foo.js']]);
});
});
21 changes: 20 additions & 1 deletion src/__tests__/scm-hg.test.js
Expand Up @@ -11,11 +11,12 @@ afterEach(() => {
jest.clearAllMocks();
});

const mockHgFs = () => {
const mockHgFs = (additionalFiles = {}) => {
mock({
'/.hg': {},
'/foo.js': 'foo()',
'/bar.md': '# foo',
...additionalFiles,
});
execa.sync.mockImplementation((command, args) => {
if (command !== 'hg') {
Expand Down Expand Up @@ -152,4 +153,22 @@ describe('with hg', () => {
expect(onExamineFile).not.toHaveBeenCalledWith('./foo.js');
expect(onExamineFile).not.toHaveBeenCalledWith('./bar.md');
});

test('ignore files matching patterns from the repositories root .prettierignore', () => {
const onWriteFile = jest.fn();
mockHgFs({
'/.prettierignore': '*.md',
});
prettyQuick('/sub-directory/', { since: 'banana', onWriteFile });
expect(onWriteFile.mock.calls).toEqual([['./foo.js']]);
});

test('ignore files matching patterns from the working directories .prettierignore', () => {
const onWriteFile = jest.fn();
mockHgFs({
'/sub-directory/.prettierignore': '*.md',
});
prettyQuick('/sub-directory/', { since: 'banana', onWriteFile });
expect(onWriteFile.mock.calls).toEqual([['./foo.js']]);
});
});
12 changes: 10 additions & 2 deletions src/index.js
Expand Up @@ -29,16 +29,24 @@ export default (

onFoundSinceRevision && onFoundSinceRevision(scm.name, revision);

const rootIgnorer = createIgnorer(directory);
const cwdIgnorer =
currentDirectory !== directory
? createIgnorer(currentDirectory)
: () => true;

const changedFiles = scm
.getChangedFiles(directory, revision, staged)
.filter(isSupportedExtension)
.filter(createIgnorer(directory));
.filter(rootIgnorer)
.filter(cwdIgnorer);

const unstagedFiles = staged
? scm
.getUnstagedChangedFiles(directory, revision)
.filter(isSupportedExtension)
.filter(createIgnorer(directory))
.filter(rootIgnorer)
.filter(cwdIgnorer)
: [];

const wasFullyStaged = f => unstagedFiles.indexOf(f) < 0;
Expand Down

0 comments on commit 43c3905

Please sign in to comment.