1// See https://microsoft.github.io/monaco-editor/monarch.html
2// Ported from stan-playground's monacoStanLanguage.ts, which is adapted in
3// part from https://github.com/WardBrian/vscode-stan-extension/blob/main/lang/syntaxes/stan.json
5import { monaco } from 'minwebide';
7const BLOCKS = [
8 "functions",
9 "model",
10 "data",
11 "parameters",
12 "generated quantities",
13 "transformed data",
14 "transformed parameters",
15];
17const STATEMENTS = [
18 "for",
19 "in",
20 "if",
21 "else",
22 "while",
23 "break",
24 "continue",
25 "return",
26 "target", // += ...
27 "jacobian", // += ...
28];
30const TYPES = [
31 "array",
32 "tuple",
33 "data",
34 "complex",
35 "int",
36 "real",
37 "vector",
38 "complex_vector",
39 "ordered",
40 "positive_ordered",
41 "simplex",
42 "unit_vector",
43 "sum_to_zero_vector",
44 "row_vector",
45 "complex_row_vector",
46 "matrix",
47 "complex_matrix",
48 "cholesky_factor_corr",
49 "cholesky_factor_cov",
50 "corr_matrix",
51 "cov_matrix",
52 "column_stochastic_matrix",
53 "row_stochastic_matrix",
54 "sum_to_zero_matrix",
55 "void",
56];
58const FUNCTIONS = [
59 "Phi",
60 "Phi_approx",
61 "abs",
62 "acos",
63 "acosh",
64 "add_diag",
65 "algebra_solver",
66 "algebra_solver_newton",
67 "append_array",
68 "append_col",
69 "append_row",
70 "arg",
71 "asin",
72 "asinh",
73 "atan",
74 "atan2",
75 "atanh",
76 "bernoulli_cdf",
77 "bernoulli_lccdf",
78 "bernoulli_lcdf",
79 "bernoulli_logit_glm_lpmf",
80 "bernoulli_logit_glm_lupmf",
81 "bernoulli_logit_glm_rng",
82 "bernoulli_logit_lpmf",
83 "bernoulli_logit_lupmf",
84 "bernoulli_logit_rng",
85 "bernoulli_lpmf",
86 "bernoulli_lupmf",
87 "bernoulli_rng",
88 "bessel_first_kind",
89 "bessel_second_kind",
90 "beta",
91 "beta_binomial_cdf",
92 "beta_binomial_lccdf",
93 "beta_binomial_lcdf",
94 "beta_binomial_lpmf",
95 "beta_binomial_lupmf",
96 "beta_binomial_rng",
97 "beta_cdf",
98 "beta_lccdf",
99 "beta_lcdf",
100 "beta_lpdf",
101 "beta_lupdf",
102 "beta_neg_binomial_cdf",
103 "beta_neg_binomial_lccdf",
104 "beta_neg_binomial_lcdf",
105 "beta_neg_binomial_lpmf",
106 "beta_neg_binomial_lupmf",
107 "beta_neg_binomial_rng",
108 "beta_proportion_lccdf",
109 "beta_proportion_lcdf",
110 "beta_proportion_lpdf",
111 "beta_proportion_lupdf",
112 "beta_proportion_rng",
113 "beta_rng",
114 "binary_log_loss",
115 "binomial_cdf",
116 "binomial_lccdf",
117 "binomial_lcdf",
118 "binomial_logit_glm_lpmf",
119 "binomial_logit_glm_lupmf",
120 "binomial_logit_lpmf",
121 "binomial_logit_lupmf",
122 "binomial_lpmf",
123 "binomial_lupmf",
124 "binomial_rng",
125 "block",
126 "categorical_logit_glm_lpmf",
127 "categorical_logit_glm_lupmf",
128 "categorical_logit_lpmf",
129 "categorical_logit_lupmf",
130 "categorical_logit_rng",
131 "categorical_lpmf",
132 "categorical_lupmf",
133 "categorical_rng",
134 "cauchy_cdf",
135 "cauchy_lccdf",
136 "cauchy_lcdf",
137 "cauchy_lpdf",
138 "cauchy_lupdf",
139 "cauchy_rng",
140 "cbrt",
141 "ceil",
142 "chi_square_cdf",
143 "chi_square_lccdf",
144 "chi_square_lcdf",
145 "chi_square_lpdf",
146 "chi_square_lupdf",
147 "chi_square_rng",
148 "chol2inv",
149 "cholesky_decompose",
150 "cholesky_factor_corr_constrain",
151 "cholesky_factor_corr_jacobian",
152 "cholesky_factor_corr_unconstrain",
153 "cholesky_factor_cov_constrain",
154 "cholesky_factor_cov_jacobian",
155 "cholesky_factor_cov_unconstrain",
156 "choose",
157 "col",
158 "cols",
159 "columns_dot_product",
160 "columns_dot_self",
161 "complex_schur_decompose",
162 "complex_schur_decompose_t",
163 "complex_schur_decompose_u",
164 "conj",
165 "corr_matrix_constrain",
166 "corr_matrix_jacobian",
167 "corr_matrix_unconstrain",
168 "cos",
169 "cosh",
170 "cov_exp_quad",
171 "cov_matrix_constrain",
172 "cov_matrix_jacobian",
173 "cov_matrix_unconstrain",
174 "crossprod",
175 "csr_extract",
176 "csr_extract_u",
177 "csr_extract_v",
178 "csr_extract_w",
179 "csr_matrix_times_vector",
180 "csr_to_dense_matrix",
181 "cumulative_sum",
182 "dae",
183 "dae_tol",
184 "determinant",
185 "diag_matrix",
186 "diag_post_multiply",
187 "diag_pre_multiply",
188 "diagonal",
189 "digamma",
190 "dims",
191 "dirichlet_lpdf",
192 "dirichlet_lupdf",
193 "dirichlet_multinomial_lpmf",
194 "dirichlet_multinomial_lupmf",
195 "dirichlet_multinomial_rng",
196 "dirichlet_rng",
197 "discrete_range_cdf",
198 "discrete_range_lccdf",
199 "discrete_range_lcdf",
200 "discrete_range_lpmf",
201 "discrete_range_lupmf",
202 "discrete_range_rng",
203 "distance",
204 "dot_product",
205 "dot_self",
206 "double_exponential_cdf",
207 "double_exponential_lccdf",
208 "double_exponential_lcdf",
209 "double_exponential_lpdf",
210 "double_exponential_lupdf",
211 "double_exponential_rng",
212 "e",
213 "eigendecompose",
214 "eigendecompose_sym",
215 "eigenvalues",
216 "eigenvalues_sym",
217 "eigenvectors",
218 "eigenvectors_sym",
219 "erf",
220 "erfc",
221 "exp",
222 "exp2",
223 "exp_mod_normal_cdf",
224 "exp_mod_normal_lccdf",
225 "exp_mod_normal_lcdf",
226 "exp_mod_normal_lpdf",
227 "exp_mod_normal_lupdf",
228 "exp_mod_normal_rng",
229 "expm1",
230 "exponential_cdf",
231 "exponential_lccdf",
232 "exponential_lcdf",
233 "exponential_lpdf",
234 "exponential_lupdf",
235 "exponential_rng",
236 "falling_factorial",
237 "fdim",
238 "fft",
239 "fft2",
240 "floor",
241 "fma",
242 "fmax",
243 "fmin",
244 "fmod",
245 "frechet_cdf",
246 "frechet_lccdf",
247 "frechet_lcdf",
248 "frechet_lpdf",
249 "frechet_lupdf",
250 "frechet_rng",
251 "gamma_cdf",
252 "gamma_lccdf",
253 "gamma_lcdf",
254 "gamma_lpdf",
255 "gamma_lupdf",
256 "gamma_p",
257 "gamma_q",
258 "gamma_rng",
259 "gaussian_dlm_obs_lpdf",
260 "gaussian_dlm_obs_lupdf",
261 "generalized_inverse",
262 "generate_laplace_options",
263 "get_imag",
264 "get_real",
265 "gp_dot_prod_cov",
266 "gp_exp_quad_cov",
267 "gp_exponential_cov",
268 "gp_matern23_cov",
269 "gp_matern52_cov",
270 "gp_periodic_cov",
271 "gumbel_cdf",
272 "gumbel_lccdf",
273 "gumbel_lcdf",
274 "gumbel_lpdf",
275 "gumbel_lupdf",
276 "gumbel_rng",
277 "head",
278 "hmm_hidden_state_prob",
279 "hmm_latent_rng",
280 "hmm_marginal",
281 "hypergeometric_1F0",
282 "hypergeometric_2F1",
283 "hypergeometric_3F2",
284 "hypergeometric_lpmf",
285 "hypergeometric_lupmf",
286 "hypergeometric_pFq",
287 "hypergeometric_rng",
288 "hypot",
289 "identity_matrix",
290 "inc_beta",
291 "int_step",
292 "integrate_1d",
293 "integrate_ode",
294 "integrate_ode_adams",
295 "integrate_ode_bdf",
296 "integrate_ode_rk45",
297 "inv",
298 "inv_Phi",
299 "inv_chi_square_cdf",
300 "inv_chi_square_lccdf",
301 "inv_chi_square_lcdf",
302 "inv_chi_square_lpdf",
303 "inv_chi_square_lupdf",
304 "inv_chi_square_rng",
305 "inv_cloglog",
306 "inv_erfc",
307 "inv_fft",
308 "inv_fft2",
309 "inv_gamma_cdf",
310 "inv_gamma_lccdf",
311 "inv_gamma_lcdf",
312 "inv_gamma_lpdf",
313 "inv_gamma_lupdf",
314 "inv_gamma_rng",
315 "inv_inc_beta",
316 "inv_logit",
317 "inv_sqrt",
318 "inv_square",
319 "inv_wishart_cholesky_lpdf",
320 "inv_wishart_cholesky_lupdf",
321 "inv_wishart_cholesky_rng",
322 "inv_wishart_lpdf",
323 "inv_wishart_lupdf",
324 "inv_wishart_rng",
325 "inverse",
326 "inverse_spd",
327 "is_inf",
328 "is_nan",
329 "lambert_w0",
330 "lambert_wm1",
331 "laplace_latent_bernoulli_logit_rng",
332 "laplace_latent_neg_binomial_2_log_rng",
333 "laplace_latent_poisson_log_rng",
334 "laplace_latent_rng",
335 "laplace_latent_rng_tol",
336 "laplace_latent_tol_bernoulli_logit_rng",
337 "laplace_latent_tol_neg_binomial_2_log_rng",
338 "laplace_latent_tol_poisson_log_rng",
339 "laplace_marginal",
340 "laplace_marginal_bernoulli_logit_lpmf",
341 "laplace_marginal_bernoulli_logit_lupmf",
342 "laplace_marginal_neg_binomial_2_log_lpmf",
343 "laplace_marginal_neg_binomial_2_log_lupmf",
344 "laplace_marginal_poisson_log_lpmf",
345 "laplace_marginal_poisson_log_lupmf",
346 "laplace_marginal_tol",
347 "laplace_marginal_tol_bernoulli_logit_lpmf",
348 "laplace_marginal_tol_bernoulli_logit_lupmf",
349 "laplace_marginal_tol_neg_binomial_2_log_lpmf",
350 "laplace_marginal_tol_neg_binomial_2_log_lupmf",
351 "laplace_marginal_tol_poisson_log_lpmf",
352 "laplace_marginal_tol_poisson_log_lupmf",
353 "lbeta",
354 "lchoose",
355 "ldexp",
356 "lgamma",
357 "linspaced_array",
358 "linspaced_int_array",
359 "linspaced_row_vector",
360 "linspaced_vector",
361 "lkj_corr_cholesky_lpdf",
362 "lkj_corr_cholesky_lupdf",
363 "lkj_corr_cholesky_rng",
364 "lkj_corr_lpdf",
365 "lkj_corr_lupdf",
366 "lkj_corr_rng",
367 "lmgamma",
368 "lmultiply",
369 "log",
370 "log10",
371 "log1m",
372 "log1m_exp",
373 "log1m_inv_logit",
374 "log1p",
375 "log1p_exp",
376 "log2",
377 "log_determinant",
378 "log_diff_exp",
379 "log_falling_factorial",
380 "log_inv_logit",
381 "log_inv_logit_diff",
382 "log_mix",
383 "log_modified_bessel_first_kind",
384 "log_rising_factorial",
385 "log_softmax",
386 "log_sum_exp",
387 "logistic_cdf",
388 "logistic_lccdf",
389 "logistic_lcdf",
390 "logistic_lpdf",
391 "logistic_lupdf",
392 "logistic_rng",
393 "logit",
394 "loglogistic_cdf",
395 "loglogistic_lpdf",
396 "loglogistic_rng",
397 "lognormal_cdf",
398 "lognormal_lccdf",
399 "lognormal_lcdf",
400 "lognormal_lpdf",
401 "lognormal_lupdf",
402 "lognormal_rng",
403 "lower_bound_constrain",
404 "lower_bound_jacobian",
405 "lower_bound_unconstrain",
406 "lower_upper_bound_constrain",
407 "lower_upper_bound_jacobian",
408 "lower_upper_bound_unconstrain",
409 "machine_precision",
410 "map_rect",
411 "matrix_exp",
412 "matrix_exp_multiply",
413 "matrix_power",
414 "max",
415 "mdivide_left_spd",
416 "mdivide_left_tri_low",
417 "mdivide_right_spd",
418 "mdivide_right_tri_low",
419 "mean",
420 "min",
421 "modified_bessel_first_kind",
422 "modified_bessel_second_kind",
423 "multi_gp_cholesky_lpdf",
424 "multi_gp_cholesky_lupdf",
425 "multi_gp_lpdf",
426 "multi_gp_lupdf",
427 "multi_normal_cholesky_lpdf",
428 "multi_normal_cholesky_lupdf",
429 "multi_normal_cholesky_rng",
430 "multi_normal_lpdf",
431 "multi_normal_lupdf",
432 "multi_normal_prec_lpdf",
433 "multi_normal_prec_lupdf",
434 "multi_normal_rng",
435 "multi_student_cholesky_t_rng",
436 "multi_student_t_cholesky_lpdf",
437 "multi_student_t_cholesky_lupdf",
438 "multi_student_t_cholesky_rng",
439 "multi_student_t_lpdf",
440 "multi_student_t_lupdf",
441 "multi_student_t_rng",
442 "multinomial_logit_lpmf",
443 "multinomial_logit_lupmf",
444 "multinomial_logit_rng",
445 "multinomial_lpmf",
446 "multinomial_lupmf",
447 "multinomial_rng",
448 "multiply_lower_tri_self_transpose",
449 "neg_binomial_2_cdf",
450 "neg_binomial_2_lccdf",
451 "neg_binomial_2_lcdf",
452 "neg_binomial_2_log_glm_lpmf",
453 "neg_binomial_2_log_glm_lupmf",
454 "neg_binomial_2_log_lpmf",
455 "neg_binomial_2_log_lupmf",
456 "neg_binomial_2_log_rng",
457 "neg_binomial_2_lpmf",
458 "neg_binomial_2_lupmf",
459 "neg_binomial_2_rng",
460 "neg_binomial_cdf",
461 "neg_binomial_lccdf",
462 "neg_binomial_lcdf",
463 "neg_binomial_lpmf",
464 "neg_binomial_lupmf",
465 "neg_binomial_rng",
466 "negative_infinity",
467 "norm",
468 "norm1",
469 "norm2",
470 "normal_cdf",
471 "normal_id_glm_lpdf",
472 "normal_id_glm_lupdf",
473 "normal_lccdf",
474 "normal_lcdf",
475 "normal_lpdf",
476 "normal_lupdf",
477 "normal_rng",
478 "not_a_number",
479 "num_elements",
480 "ode_adams",
481 "ode_adams_tol",
482 "ode_adjoint_tol_ctl",
483 "ode_bdf",
484 "ode_bdf_tol",
485 "ode_ckrk",
486 "ode_ckrk_tol",
487 "ode_rk45",
488 "ode_rk45_tol",
489 "offset_multiplier_constrain",
490 "offset_multiplier_jacobian",
491 "offset_multiplier_unconstrain",
492 "one_hot_array",
493 "one_hot_int_array",
494 "one_hot_row_vector",
495 "one_hot_vector",
496 "ones_array",
497 "ones_int_array",
498 "ones_row_vector",
499 "ones_vector",
500 "ordered_constrain",
501 "ordered_jacobian",
502 "ordered_logistic_glm_lpmf",
503 "ordered_logistic_glm_lupmf",
504 "ordered_logistic_lpmf",
505 "ordered_logistic_lupmf",
506 "ordered_logistic_rng",
507 "ordered_probit_lpmf",
508 "ordered_probit_lupmf",
509 "ordered_probit_rng",
510 "ordered_unconstrain",
511 "owens_t",
512 "pareto_cdf",
513 "pareto_lccdf",
514 "pareto_lcdf",
515 "pareto_lpdf",
516 "pareto_lupdf",
517 "pareto_rng",
518 "pareto_type_2_cdf",
519 "pareto_type_2_lccdf",
520 "pareto_type_2_lcdf",
521 "pareto_type_2_lpdf",
522 "pareto_type_2_lupdf",
523 "pareto_type_2_rng",
524 "pi",
525 "poisson_cdf",
526 "poisson_lccdf",
527 "poisson_lcdf",
528 "poisson_log_glm_lpmf",
529 "poisson_log_glm_lupmf",
530 "poisson_log_lpmf",
531 "poisson_log_lupmf",
532 "poisson_log_rng",
533 "poisson_lpmf",
534 "poisson_lupmf",
535 "poisson_rng",
536 "polar",
537 "positive_infinity",
538 "positive_ordered_constrain",
539 "positive_ordered_jacobian",
540 "positive_ordered_unconstrain",
541 "pow",
542 "prod",
543 "proj",
544 "qr",
545 "qr_Q",
546 "qr_R",
547 "qr_thin",
548 "qr_thin_Q",
549 "qr_thin_R",
550 "quad_form",
551 "quad_form_diag",
552 "quad_form_sym",
553 "quantile",
554 "rank",
555 "rayleigh_cdf",
556 "rayleigh_lccdf",
557 "rayleigh_lcdf",
558 "rayleigh_lpdf",
559 "rayleigh_lupdf",
560 "rayleigh_rng",
561 "reduce_sum",
562 "reduce_sum_static",
563 "rep_array",
564 "rep_matrix",
565 "rep_row_vector",
566 "rep_vector",
567 "reverse",
568 "rising_factorial",
569 "round",
570 "row",
571 "rows",
572 "rows_dot_product",
573 "rows_dot_self",
574 "scale_matrix_exp_multiply",
575 "scaled_inv_chi_square_cdf",
576 "scaled_inv_chi_square_lccdf",
577 "scaled_inv_chi_square_lcdf",
578 "scaled_inv_chi_square_lpdf",
579 "scaled_inv_chi_square_lupdf",
580 "scaled_inv_chi_square_rng",
581 "sd",
582 "segment",
583 "simplex_constrain",
584 "simplex_jacobian",
585 "simplex_unconstrain",
586 "sin",
587 "singular_values",
588 "sinh",
589 "size",
590 "skew_double_exponential_cdf",
591 "skew_double_exponential_lccdf",
592 "skew_double_exponential_lcdf",
593 "skew_double_exponential_lpdf",
594 "skew_double_exponential_lupdf",
595 "skew_double_exponential_rng",
596 "skew_normal_cdf",
597 "skew_normal_lccdf",
598 "skew_normal_lcdf",
599 "skew_normal_lpdf",
600 "skew_normal_lupdf",
601 "skew_normal_rng",
602 "softmax",
603 "solve_newton",
604 "solve_newton_tol",
605 "solve_powell",
606 "solve_powell_tol",
607 "sort_asc",
608 "sort_desc",
609 "sort_indices_asc",
610 "sort_indices_desc",
611 "sqrt",
612 "sqrt2",
613 "square",
614 "squared_distance",
615 "std_normal_cdf",
616 "std_normal_lccdf",
617 "std_normal_lcdf",
618 "std_normal_log_qf",
619 "std_normal_lpdf",
620 "std_normal_lupdf",
621 "std_normal_qf",
622 "std_normal_rng",
623 "step",
624 "stochastic_column_constrain",
625 "stochastic_column_jacobian",
626 "stochastic_column_unconstrain",
627 "stochastic_row_constrain",
628 "stochastic_row_jacobian",
629 "stochastic_row_unconstrain",
630 "student_t_cdf",
631 "student_t_lccdf",
632 "student_t_lcdf",
633 "student_t_lpdf",
634 "student_t_lupdf",
635 "student_t_rng",
636 "sub_col",
637 "sub_row",
638 "sum",
639 "sum_to_zero_constrain",
640 "sum_to_zero_jacobian",
641 "sum_to_zero_unconstrain",
642 "svd",
643 "svd_U",
644 "svd_V",
645 "symmetrize_from_lower_tri",
646 "tail",
647 "tan",
648 "tanh",
649 "target",
650 "tcrossprod",
651 "tgamma",
652 "to_array_1d",
653 "to_array_2d",
654 "to_complex",
655 "to_int",
656 "to_matrix",
657 "to_row_vector",
658 "to_vector",
659 "trace",
660 "trace_dot",
661 "trace_gen_quad_form",
662 "trace_quad_form",
663 "trigamma",
664 "trunc",
665 "uniform_cdf",
666 "uniform_lccdf",
667 "uniform_lcdf",
668 "uniform_lpdf",
669 "uniform_lupdf",
670 "uniform_rng",
671 "uniform_simplex",
672 "unit_vectors_constrain",
673 "unit_vectors_jacobian",
674 "unit_vectors_unconstrain",
675 "upper_bound_constrain",
676 "upper_bound_jacobian",
677 "upper_bound_unconstrain",
678 "variance",
679 "von_mises_cdf",
680 "von_mises_lccdf",
681 "von_mises_lcdf",
682 "von_mises_lpdf",
683 "von_mises_lupdf",
684 "von_mises_rng",
685 "weibull_cdf",
686 "weibull_lccdf",
687 "weibull_lcdf",
688 "weibull_lpdf",
689 "weibull_lupdf",
690 "weibull_rng",
691 "wiener_lccdf_unnorm",
692 "wiener_lcdf_unnorm",
693 "wiener_lpdf",
694 "wiener_lupdf",
695 "wishart_cholesky_lpdf",
696 "wishart_cholesky_lupdf",
697 "wishart_cholesky_rng",
698 "wishart_lpdf",
699 "wishart_lupdf",
700 "wishart_rng",
701 "yule_simon_cdf",
702 "yule_simon_lccdf",
703 "yule_simon_lcdf",
704 "yule_simon_lpmf",
705 "yule_simon_lupmf",
706 "yule_simon_rng",
707 "zeros_array",
708 "zeros_int_array",
709 "zeros_row_vector",
710 "zeros_vector",
711];
713const SPECIAL_FUNCTIONS = ["print", "reject", "fatal_error"];
715const DISTRIBUTIONS = [
716 "bernoulli",
717 "bernoulli_logit",
718 "bernoulli_logit_glm",
719 "beta",
720 "beta_binomial",
721 "beta_neg_binomial",
722 "beta_proportion",
723 "binomial",
724 "binomial_logit",
725 "binomial_logit_glm",
726 "categorical",
727 "categorical_logit",
728 "categorical_logit_glm",
729 "cauchy",
730 "chi_square",
731 "dirichlet",
732 "dirichlet_multinomial",
733 "discrete_range",
734 "double_exponential",
735 "exp_mod_normal",
736 "exponential",
737 "frechet",
738 "gamma",
739 "gaussian_dlm_obs",
740 "gumbel",
741 "hypergeometric",
742 "inv_chi_square",
743 "inv_gamma",
744 "inv_wishart",
745 "inv_wishart_cholesky",
746 "laplace_marginal_bernoulli_logit",
747 "laplace_marginal_neg_binomial_2_log",
748 "laplace_marginal_poisson_log",
749 "laplace_marginal_tol_bernoulli_logit",
750 "laplace_marginal_tol_neg_binomial_2_log",
751 "laplace_marginal_tol_poisson_log",
752 "lkj_corr",
753 "lkj_corr_cholesky",
754 "logistic",
755 "loglogistic",
756 "lognormal",
757 "multi_gp",
758 "multi_gp_cholesky",
759 "multi_normal",
760 "multi_normal_cholesky",
761 "multi_normal_prec",
762 "multi_student_t",
763 "multi_student_t_cholesky",
764 "multinomial",
765 "multinomial_logit",
766 "neg_binomial",
767 "neg_binomial_2",
768 "neg_binomial_2_log",
769 "neg_binomial_2_log_glm",
770 "normal",
771 "normal_id_glm",
772 "ordered_logistic",
773 "ordered_logistic_glm",
774 "ordered_probit",
775 "pareto",
776 "pareto_type_2",
777 "poisson",
778 "poisson_log",
779 "poisson_log_glm",
780 "rayleigh",
781 "scaled_inv_chi_square",
782 "skew_double_exponential",
783 "skew_normal",
784 "std_normal",
785 "student_t",
786 "uniform",
787 "von_mises",
788 "weibull",
789 "wiener",
790 "wishart",
791 "wishart_cholesky",
792 "yule_simon",
793];
795const RANGE_CONSTRAINTS = ["lower", "upper", "offset", "multiplier"];
797const OPERATORS = [
798 "=",
799 ">",
800 "<",
801 "!",
802 "~",
803 "?",
804 ":",
805 "==",
806 "<=",
807 ">=",
808 "!=",
809 "&&",
810 "||",
811 "+",
812 "-",
813 "*",
814 "/",
815 "\\",
816 "|",
817 "^",
818 "%",
819 ">>",
820 "+=",
821 "-=",
822 "*=",
823 "/=",
824 "&=",
825 "|=",
826 "^=",
827 "%=",
828];
830export const conf: monaco.languages.LanguageConfiguration = {
831 comments: {
832 lineComment: "//",
833 blockComment: ["/*", "*/"],
834 },
835 brackets: [
836 ["{", "}"],
837 ["[", "]"],
838 ["(", ")"],
839 ],
840 autoClosingPairs: [
841 { open: "[", close: "]" },
842 { open: "{", close: "}" },
843 { open: "(", close: ")" },
844 { open: "'", close: "'", notIn: ["string", "comment"] },
845 { open: '"', close: '"', notIn: ["string"] },
846 ],
847 surroundingPairs: [
848 { open: "{", close: "}" },
849 { open: "[", close: "]" },
850 { open: "(", close: ")" },
851 { open: '"', close: '"' },
852 { open: "'", close: "'" },
853 ],
854 indentationRules: {
855 increaseIndentPattern: /(\{[^}\"\']*$) | (\[[^\]\"\']*$) | (\([^)\"\']*$)/,
856 decreaseIndentPattern: /^[\}\]\)]/,
857 },
858 folding: {
859 markers: {
860 start:
861 /^[functions|data|transformed\s+data|parameters|transformed\s+parameters|model|generated\s+quantities]\s\{$/,
862 end: /^\}$/,
863 },
864 },
865 wordPattern: /[a-zA-Z_][a-zA-Z0-9_]*/,
866};
868export const language = <monaco.languages.IMonarchLanguage>{
869 defaultToken: "",
870 tokenPostfix: ".stan",
872 brackets: [
873 { token: "delimiter.curly", open: "{", close: "}" },
874 { token: "delimiter.parenthesis", open: "(", close: ")" },
875 { token: "delimiter.square", open: "[", close: "]" },
876 { token: "delimiter.angle", open: "<", close: ">" },
877 ],
879 blocks: BLOCKS.join("|"),
880 functions: [...FUNCTIONS, ...SPECIAL_FUNCTIONS].join("|"),
881 distributions: DISTRIBUTIONS.join("|"),
882 keywords: STATEMENTS,
883 types: TYPES,
884 constraints: RANGE_CONSTRAINTS,
886 operators: OPERATORS,
887 symbols: /[=><!~?:&|+\-*\/\^%]+/,
889 tokenizer: {
890 root: [
891 [/(@blocks)\s*{/, "attribute.value.$0"],
893 [/(@functions)\s*\(/, "tag.function.$0"],
894 [/~\s*(@distributions)\s*\(/, "tag.distribution.$1"],
896 // identifiers and keywords
897 [
898 /[a-zA-Z_]\w*/,
899 {
900 cases: {
901 "@types": "type.$0",
902 "@constraints": "variable.predefined.$0",
903 "@keywords": "keyword.$0",
904 "@default": "identifier",
905 },
906 },
907 ],
909 // whitespace
910 { include: "@whitespace" },
912 // delimiters and operators
913 [/[{}()<>\[\]]/, "@brackets"],
914 [
915 /@symbols/,
916 {
917 cases: {
918 "@operators": "delimiter",
919 "@default": "",
920 },
921 },
922 ],
924 // numbers
925 [/\d*\d+[eE]([\-+]?\d+)?i?/, "number.float"],
926 [/\d*\.\d+([eE][\-+]?\d+)?i?/, "number.float"],
927 [/\d[\d']*\di?/, "number"],
928 [/\di?/, "number"],
930 // strings
931 [/"/, "string", "@string"],
933 // characters
934 [/'[^\\']'/, "string"],
935 [/'/, "string.invalid"],
936 ],
938 whitespace: [
939 [/[ \t\r\n]+/, ""],
940 [/\/\*/, "comment", "@comment"],
941 [/\/\/.*\\$/, "comment", "@linecomment"],
942 [/\/\/.*$/, "comment"],
943 ],
945 comment: [
946 [/[^\/*]+/, "comment"],
947 [/\*\//, "comment", "@pop"],
948 [/[\/*]/, "comment"],
949 ],
951 //For use with continuous line comments
952 linecomment: [
953 [/.*[^\\]$/, "comment", "@pop"],
954 [/[^]+/, "comment"],
955 ],
956 string: [
957 [/[^\\"]+/, "string"],
958 [/"/, "string", "@pop"],
959 ],
960 },
961};