typescript.snippets 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563
  1. global !p
  2. def upperfirst(t):
  3. if len(t) < 2:
  4. return '' if len(t) < 1 else t.capitalize()
  5. return t[0].capitalize() + t[1:]
  6. def lowerdash(t):
  7. return '-'.join([ w.lower() for w in re.findall('[a-z]+|[A-Z]+[a-z]*', t) ])
  8. endglobal
  9. # Normal javascript snippets
  10. #
  11. snippet rc "require package that converts from camelCase or PascalCase to kebab-cased" b
  12. const $1 = require("$2`!p snip.rv=lowerdash(t[1])`");
  13. endsnippet
  14. snippet imp "import package that converts from camelCase or PascalCase to kebab-cased" b
  15. import $1 from "$2`!p snip.rv=lowerdash(t[1])`";
  16. endsnippet
  17. snippet impf "import File from './File'" b
  18. import $1 from "${2:./}${3:$1}";
  19. endsnippet
  20. snippet impn "import {nested} from" b
  21. import { $1 } from "$2";
  22. endsnippet
  23. snippet impa "import all from a package that converts from camelCase or PascalCase to kebab-cased" b
  24. import * as $1 from "$2`!p snip.rv=lowerdash(t[1])`";
  25. endsnippet
  26. snippet impp "import file without a declaration" b
  27. import "$1";
  28. endsnippet
  29. snippet icn "import classnames as cn" b
  30. import cn from "classnames";
  31. endsnippet
  32. snippet expf "export File from './File'" b
  33. export $1 from "${2:./}$1";
  34. endsnippet
  35. snippet expn "export nested" b
  36. export { $1 } from "$2";
  37. endsnippet
  38. snippet expd "export { default as File } from './File'" b
  39. export { default as $1 } from "${2:./}$1";
  40. endsnippet
  41. snippet expa "export * from" b
  42. export * from "$1";
  43. endsnippet
  44. snippet cl "console.log"
  45. console.log($1);
  46. endsnippet
  47. snippet clv "console.log variable"
  48. console.log("$1:", $1);
  49. endsnippet
  50. snippet ce "console.error"
  51. console.error($1);
  52. endsnippet
  53. snippet cw "console.warn"
  54. console.warn($1);
  55. endsnippet
  56. snippet ct "console.table"
  57. console.table($1);
  58. endsnippet
  59. # ==========================================
  60. # Test Snippets
  61. #
  62. snippet rtf "React Test File" b
  63. import React from "react";
  64. import { cleanup, render } from "react-testing-library";
  65. import ${1:`!v expand('%:t:r')`} from "../$1";
  66. afterEach(cleanup);
  67. describe("$1", () => {
  68. it("should $2", () => {
  69. $3
  70. });
  71. });
  72. endsnippet
  73. snippet rhtf "React Hooks Test File" b
  74. import {cleanup} from "react-testing-library";
  75. import {renderHook} from "react-hooks-testing-library";
  76. import $2 from "../${1:`!v expand('%:t:r')`}";
  77. afterEach(cleanup);
  78. describe("$1", () => {
  79. it("should $3", () => {
  80. $4
  81. });
  82. });
  83. endsnippet
  84. snippet desc "describe a test" b
  85. describe("$1", () => {
  86. it("should $2", () => {
  87. $3
  88. });
  89. });
  90. endsnippet
  91. snippet it "create a test block" b
  92. it("should $1", () => {
  93. $2
  94. });
  95. endsnippet
  96. snippet intf "create interface for file" b
  97. export interface ${1:`!v expand('%:t:r')`}$2 {
  98. }
  99. endsnippet
  100. # ==========================================
  101. # React Snippets
  102. #
  103. snippet rce "react class exported" b
  104. import React from "react";
  105. export default class ${1:`!v expand('%:t:r')`} extends React.Component {
  106. public render() {
  107. return ${2:null};$0
  108. }
  109. }
  110. endsnippet
  111. snippet rcep "react class exported (with prop interface)" b
  112. import React from "react";
  113. export interface $1Props {
  114. }
  115. export default class ${1:`!v expand('%:t:r')`} extends React.Component<$1Props> {
  116. public render() {
  117. return ${2:null};$0
  118. }
  119. }
  120. endsnippet
  121. snippet rceps "react class exported (with prop and state interfaces)" b
  122. import React from "react";
  123. export interface $1Props {
  124. }
  125. export interface $1State {
  126. }
  127. export default class ${1:`!v expand('%:t:r')`} extends React.Component<$1Props, $1State> {
  128. constructor(props: $1Props) {
  129. super(props);
  130. this.state = {};
  131. }
  132. public render() {
  133. return ${2:null};$0
  134. }
  135. }
  136. endsnippet
  137. snippet rcc "React class component" b
  138. class $1 extends React.Component {
  139. public render() {
  140. return null;$0
  141. }
  142. }
  143. endsnippet
  144. snippet rcon "React class constructor" b
  145. constructor(props: ${1:`!v expand('%:t:r')`}Props) {
  146. super(props);
  147. this.state = ${1:{}};$0
  148. }
  149. endsnippet
  150. snippet fce "function component export (with prop interface)" b
  151. import React from "react";
  152. export interface $1Props {
  153. $3
  154. }
  155. const ${1:`!v expand('%:t:r')`}: React.FC<$2$1Props> = props => {
  156. return ${4:null};$0
  157. };
  158. export default $1;
  159. endsnippet
  160. snippet sfce "simple function component export (no prop interface)" b
  161. import React from "react";
  162. const ${1:`!v expand('%:t:r')`}: React.FC = () => ${2:{
  163. return ${3:null};$0
  164. }};
  165. export default $1;
  166. endsnippet
  167. snippet fc "functional component" b
  168. const $1: React.FC$2 = ${3:props} => {
  169. return null;$0
  170. };
  171. endsnippet
  172. snippet rcf "react class function" b
  173. $1 = (${2:event}) => {
  174. $3
  175. };
  176. endsnippet
  177. # ==========================================
  178. # React.Component Specs and Lifecycle Section
  179. #
  180. snippet sdp "static default props" b
  181. public static defaultProps = {
  182. $2
  183. };
  184. endsnippet
  185. snippet sdpt "static default props (typed)" b
  186. public static defaultProps: DefaultProps = {
  187. $2
  188. };
  189. endsnippet
  190. snippet cdp "component default props" b
  191. ${1:`!v expand('%:t:r')`}.defaultProps = {
  192. $2
  193. };
  194. endsnippet
  195. snippet cdpt "component default props (typed)" b
  196. const defaultProps: $1DefaultProps = {
  197. $2
  198. };
  199. ${3:`!v expand('%:t:r')`}.defaultProps = defaultProps;
  200. endsnippet
  201. snippet spt "static prop types" b
  202. public static propTypes = {
  203. ${1:className}: ${2:PropTypes.string},$0
  204. };
  205. endsnippet
  206. snippet cpt "component prop types" b
  207. ${1:`!v expand('%:t:r')`}.propTypes = {
  208. ${2:className}: ${3:PropTypes.string},$0
  209. };
  210. endsnippet
  211. snippet gds "get derived state from props" b
  212. public static getDerivedStateFromProps(nextProps: ${1:`!v expand('%:t:r')`}Props, prevState: $1State) {
  213. return ${2:null};$0
  214. };
  215. endsnippet
  216. snippet gde "get derived state from props" b
  217. public static getDerivedStateFromError(error: Error) {
  218. return ${1:null};$0
  219. };
  220. endsnippet
  221. snippet cdm "component did mount" b
  222. public componentDidMount() {
  223. $1
  224. }
  225. endsnippet
  226. snippet scu "should component update" b
  227. public shouldComponentUpdate(nextProps: ${1:`!v expand('%:t:r')`}Props, nextState: $1State) {
  228. return ${1:true};$0
  229. }
  230. endsnippet
  231. snippet gsbu "get snapshot before update" b
  232. public getSnapshotBeforeUpdate(prevProps: ${1:`!v expand('%:t:r')`}Props, prevState: $1State) {
  233. return ${2:null};$0
  234. }
  235. endsnippet
  236. snippet cdu "component did update" b
  237. public componentDidUpdate(prevProps: ${1:`!v expand('%:t:r')`}Props, prevState: $1State, ${2:snapshot: any}) {
  238. $3
  239. }
  240. endsnippet
  241. snippet cdc "component did catch" b
  242. public componentDidCatch(error: Error, info: ErrorInfo) {
  243. $1
  244. }
  245. endsnippet
  246. snippet cwum "component will unmount" b
  247. public componentWillUnmount() {
  248. $1
  249. }
  250. endsnippet
  251. snippet r.me "React.MouseEvent" w
  252. React.MouseEvent$0
  253. endsnippet
  254. snippet r.te "React.TouchEvent" w
  255. React.TouchEvent$0
  256. endsnippet
  257. snippet r.ke "React.KeyboardEvent" w
  258. React.KeyboardEvent$0
  259. endsnippet
  260. snippet r.ce "React.ChangeEvent" w
  261. React.ChangeEvent$0
  262. endsnippet
  263. snippet r.fo "React.FocusEvent" w
  264. React.FocusEvent$0
  265. endsnippet
  266. snippet r.meh "React.MouseEventHandler" w
  267. React.MouseEventHandler$0
  268. endsnippet
  269. snippet r.teh "React.TouchEventHandler" w
  270. React.TouchEventHandler$0
  271. endsnippet
  272. snippet r.keh "React.KeyboardEventHandler" w
  273. React.KeyboardEventHandler$0
  274. endsnippet
  275. snippet r.ceh "React.ChangeEventHandler" w
  276. React.ChangeEventHandler$0
  277. endsnippet
  278. snippet r.foh "React.FocusEventHandler" w
  279. React.FocusEventHandler$0
  280. endsnippet
  281. # ==========================================
  282. # Hooks and effects
  283. #
  284. snippet useS "useState()" b
  285. const [$1, set$4`!p snip.rv=upperfirst(t[1])`] = useState$3($2);$0
  286. endsnippet
  287. snippet useE "useEffect()" b
  288. useEffect(() => {
  289. $1$0
  290. }$2);
  291. endsnippet
  292. snippet useC "useContext()" b
  293. ${5:const ${1:context} =} useContext$3($2);$0
  294. endsnippet
  295. priority -1
  296. snippet useC "useContext()" w
  297. useContext$2($1);
  298. endsnippet
  299. priority 0
  300. snippet useRed "useReducer(reducer, initialValue)" b
  301. const [${4:state}, ${5:dispatch}] = useReducer<typeof $2>(${2:reducer}, ${3:null});
  302. endsnippet
  303. snippet useRedUT "use reducer untyped" b
  304. const [${3:state}, ${4:dispatch}] = useReducer($1, ${2:{}});
  305. endsnippet
  306. snippet useCB "useCallback(fn, inputs)" b
  307. const ${1:callback} = useCallback(($2) => ${3:{
  308. $4
  309. }}, [$5]);
  310. endsnippet
  311. snippet useM "useMemo(fn, inputs)" b
  312. const ${1:memoized} = useMemo(() => ${2:{
  313. $3
  314. }}, [$4]);
  315. endsnippet
  316. snippet useR "useRef(defaultValue)" b
  317. const ${1:ref} = useRef$3(${2:null});$0
  318. endsnippet
  319. snippet useI "useImperitiveHandle(ref, createHandle, [inputs])" b
  320. useImperitiveHandle(${1:ref}, ${4:() => ({
  321. $2
  322. })}, ${5:[$3]})
  323. endsnippet
  324. snippet useL "useLayoutEffect()" b
  325. useLayoutEffect(() => {
  326. $1
  327. });
  328. endsnippet
  329. snippet useD "useDebugValue(value)" b
  330. useDebugValue(${1:null});
  331. endsnippet
  332. # ==========================================
  333. # Other useful react/redux snippets
  334. #
  335. snippet fref "React forward ref" b
  336. export default forwardRef<$2Element, $1Props>((props, ref) => <${1:`!v expand('%:t:r')`} {...props} ${3:forwardedRef}={ref} />);
  337. endsnippet
  338. priority -1
  339. snippet fref "React forward ref" w
  340. forwardRef<$2Element, $1Props>((props, ref) => <${1:`!v expand('%:t:r')`} {...props} ${3:forwardedRef}={ref} />);
  341. endsnippet
  342. priority 0
  343. snippet cc "React create context" b
  344. export const $1 = createContext$3($2);$0
  345. endsnippet
  346. # ==========================================
  347. # Prop Types Section (only for legacy)
  348. #
  349. # Inline prop types
  350. snippet pt.a "PropTypes.array" w
  351. PropTypes.array
  352. endsnippet
  353. snippet pt.ar "PropTypes.array.isRequired" w
  354. PropTypes.array.isRequired
  355. endsnippet
  356. snippet pt.b "PropTypes.bool" w
  357. PropTypes.bool
  358. endsnippet
  359. snippet pt.br "PropTypes.bool.isRequired" w
  360. PropTypes.bool.isRequired
  361. endsnippet
  362. snippet pt.f "PropTypes.func" w
  363. PropTypes.func
  364. endsnippet
  365. snippet pt.fr "PropTypes.func.isRequired" w
  366. PropTypes.func.isRequired
  367. endsnippet
  368. snippet pt.nu "PropTypes.number" w
  369. PropTypes.number
  370. endsnippet
  371. snippet pt.nur "PropTypes.number.isRequired" w
  372. PropTypes.number.isRequired
  373. endsnippet
  374. snippet pt.o "PropTypes.object" w
  375. PropTypes.object
  376. endsnippet
  377. snippet pt.or "PropTypes.object.isRequired" w
  378. PropTypes.object.isRequired
  379. endsnippet
  380. snippet pt.s "PropTyes.string" w
  381. PropTypes.string
  382. endsnippet
  383. snippet pt.sr "PropTyes.string.isRequired" w
  384. PropTypes.string.isRequired
  385. endsnippet
  386. snippet pt.no "PropTypes.node" w
  387. PropTypes.node
  388. endsnippet
  389. snippet pt.nor "PropTypes.node.isRequired" w
  390. PropTypes.node.isRequired
  391. endsnippet
  392. snippet pt.e "PropTypes.element" w
  393. PropTypes.element
  394. endsnippet
  395. snippet pt.er "PropTypes.element.isRequired" w
  396. PropTypes.element.isRequired
  397. endsnippet
  398. snippet pt.ao "PropTypes.arrayOf()" w
  399. PropTypes.arrayOf(${1:PropTypes.string})
  400. endsnippet
  401. snippet pt.aor "PropTypes.arrayOf().isRequired" w
  402. PropTypes.arrayOf(${1:PropTypes.string}).isRequired
  403. endsnippet
  404. snippet pt.io "PropTypes.instanceOf()" w
  405. PropTypes.instanceOf(${1:PropTypes.string})
  406. endsnippet
  407. snippet pt.ior "PropTypes.instanceOf().isRequired" w
  408. PropTypes.instanceOf(${1:PropTypes.string}).isRequired
  409. endsnippet
  410. snippet pt.oo "PropTypes.objectOf()" w
  411. PropTypes.objectOf(${1:PropTypes.string})
  412. endsnippet
  413. snippet pt.oor "PropTypes.objectOf().isRequired" w
  414. PropTypes.objectOf(${1:PropTypes.string}).isRequired
  415. endsnippet
  416. snippet pt.one "PropTypes.oneOf([])" w
  417. PropTypes.oneOf(["$1"$2])
  418. endsnippet
  419. snippet pt.oner "PropTypes.oneOf([]).isRequired" w
  420. PropTypes.oneOf(["$1"$2]).isRequired
  421. endsnippet
  422. snippet pt.onet "PropTYpes.oneOfType([])" w
  423. PropTypes.oneOfType([
  424. $1
  425. ])
  426. endsnippet
  427. snippet pt.onetr "PropTYpes.oneOfType([]).isRequired" w
  428. PropTypes.oneOfType([
  429. $1
  430. ]).isRequired
  431. endsnippet
  432. snippet pt.sh "PropTypes.shape" w
  433. PropTypes.shape({
  434. $1
  435. })
  436. endsnippet
  437. snippet pt.shr "PropTypes.shape.isRequired" w
  438. PropTypes.shape({
  439. $1
  440. }).isRequired
  441. endsnippet