Skip to content

Commit a47eedc

Browse files
✨ Added Java formatter
1 parent 07cede4 commit a47eedc

File tree

6 files changed

+184
-0
lines changed

6 files changed

+184
-0
lines changed

package-lock.json

+93
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"next-seo": "^5.1.0",
2222
"nextjs-progressbar": "^0.0.13",
2323
"prettier": "^2.5.1",
24+
"prettier-plugin-java": "^1.6.1",
2425
"prism-react-renderer": "^1.3.1",
2526
"prismjs": "^1.27.0",
2627
"react": "17.0.2",

pages/formatter/java.tsx

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import Layout from '@/components/Layout';
2+
import type { NextPage } from 'next';
3+
import Setting from '@/components/Setting';
4+
import {
5+
NumberInput,
6+
NumberInputField,
7+
NumberInputStepper,
8+
NumberIncrementStepper,
9+
NumberDecrementStepper,
10+
Switch,
11+
} from '@chakra-ui/react';
12+
import usePath from '@/utils/usePath';
13+
import formatCode from '@/utils/formatCode';
14+
15+
import javaParser from 'prettier-plugin-java';
16+
import { useState } from 'react';
17+
import Formatter from '@/components/Formatter';
18+
import Header from '@/components/Header';
19+
import { OnChange } from '@monaco-editor/react';
20+
21+
const JavaFormat: NextPage = () => {
22+
const path = usePath('java');
23+
const [indent, setIndent] = useState(2);
24+
const [unformatted, setUnformatted] = useState('');
25+
const [formatted, setFormatted] = useState('');
26+
27+
const format = ({
28+
val,
29+
indentation,
30+
}: {
31+
val?: string;
32+
indentation?: number;
33+
}) => {
34+
setFormatted(
35+
formatCode({
36+
code: val || unformatted,
37+
language: 'java',
38+
parser: javaParser,
39+
options: { tabWidth: indentation || indent },
40+
})
41+
);
42+
};
43+
44+
const handleChange: OnChange = val => {
45+
if (!val) return;
46+
setUnformatted(val);
47+
if (val.trim() === '') return setFormatted('');
48+
format({ val, indentation: indent });
49+
};
50+
51+
return (
52+
<>
53+
<Layout title={path.title}>
54+
<Header title={path.title} imageSrc={path.image} />
55+
<Setting title='Indentation'>
56+
<NumberInput
57+
onChange={(_, val) => {
58+
setIndent(val);
59+
format({ indentation: val });
60+
}}
61+
defaultValue={indent}
62+
min={1}
63+
max={10}
64+
>
65+
<NumberInputField />
66+
<NumberInputStepper>
67+
<NumberIncrementStepper />
68+
<NumberDecrementStepper />
69+
</NumberInputStepper>
70+
</NumberInput>
71+
</Setting>
72+
<Formatter
73+
language={'java'}
74+
unformattedCode={unformatted || ''}
75+
formattedCode={formatted || ''}
76+
handleChange={handleChange}
77+
/>
78+
</Layout>
79+
</>
80+
);
81+
};
82+
83+
export default JavaFormat;

paths.json

+5
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,10 @@
2828
"id": "/formatter/php",
2929
"title": "PHP Code Formatter",
3030
"image": "https://simpleicons.vercel.app/php/777BB4"
31+
},
32+
{
33+
"id": "/formatter/java",
34+
"title": "Java Code Formatter",
35+
"image": "https://simpleicons.vercel.app/java/007396"
3136
}
3237
]

types.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
declare module '@prettier/plugin-php/standalone';
2+
declare module 'prettier-plugin-java';

utils/importLangs.js

+1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ import Prism from 'prism-react-renderer/prism';
33
export default function importLangs() {
44
(typeof global !== 'undefined' ? global : window).Prism = Prism;
55
import('prismjs/components/prism-php');
6+
import('prismjs/components/prism-java');
67
}

0 commit comments

Comments
 (0)