aboutsummaryrefslogtreecommitdiffstats
path: root/test/lisp/progmodes (follow)
Commit message (Collapse)AuthorAgeFilesLines
* ; elisp-scope.el: Improve widget-type handling.Eshel Yaron2025-10-121-0/+26
| | | | | | | | | | | | | | | | | Use argument specs to analyze complex widget types. * lisp/emacs-lisp/elisp-scope.el (elisp-scope-widget-type) (elisp-scope-widget-type-1) (elisp-scope-widget-type-keyword-arguments) (elisp-scope-widget-type-arguments) (elisp-scope-widget-type-arguments-1): Delete, no longer used. (custom-declare-variable, define-widget): Simplify analyzers. (elisp-scope--match-spec-to-arg): Add new 'list', 'and', and 'plist-and-then' parametric specs, and add 'widget-type' as a new recursive spec. * test/lisp/progmodes/elisp-mode-resources/semantic-highlighting.el Add test.
* ; elisp-mode.el: Improve consistency among face names.feature/elisp-fontify-semanticallyEshel Yaron2025-10-121-34/+34
| | | | | | | | | | | | | | | | | Rename a couple of faces to solidify the convention that the face name 'elisp-foo' implies "references to foo", not "foo definitions". For definitions we use 'elisp-deffoo' if foo is only one word, or 'elisp-bar-baz-definition' otherwise. * lisp/progmodes/elisp-mode.el (elisp-function-reference): Rename to 'elisp-function'. (elisp-macro-call): Rename to 'elisp-macro'. (elisp-non-local-exit): (elisp-unknown-call): (elisp-special-form): * lisp/emacs-lisp/elisp-scope.el: * test/lisp/progmodes/elisp-mode-resources/semantic-highlighting.el: Update references to renamed faces.
* ; (elisp-scope-if-let): Fix case where bindings entry is a symbolEshel Yaron2025-10-081-1/+3
| | | | | | | | | * lisp/emacs-lisp/elisp-scope.el (elisp-scope-if-let): Fix handling of a plain symbol as one the bindings in an 'if-let*' form, as in (if-let* (foo) 'bar). * test/lisp/progmodes/elisp-mode-resources/semantic-highlighting.el: Test it.
* ; Add semantic highlighting test with 'when-let*'Eshel Yaron2025-10-082-4/+15
| | | | | | | * test/lisp/progmodes/elisp-mode-resources/semantic-highlighting.el: Add test form with 'when-let*'. * test/lisp/progmodes/elisp-mode-tests.el (elisp-test-font-lock): Trust temporary test buffer.
* ; Test semantic highlighting with 'cl-macrolet' and 'cl-flet'Eshel Yaron2025-10-061-0/+14
|
* ; Add another ELisp semantic highlighting testEshel Yaron2025-10-041-0/+68
| | | | | * test/lisp/progmodes/elisp-mode-resources/semantic-highlighting.el: Add test with code that uses 'cl-loop'.
* ; Add a couple of tests for ELisp semantic highlightingEshel Yaron2025-10-032-0/+37
| | | | | | | * test/lisp/progmodes/elisp-mode-tests.el (elisp-test-font-lock): New test. * test/lisp/progmodes/elisp-mode-resources/semantic-highlighting.el: New resource file.
* ruby-syntax-propertize: Add exception for /=Dmitry Gutov2025-09-161-0/+1
| | | | | | | | * lisp/progmodes/ruby-mode.el (ruby-syntax-propertize): Create an exception for assign-division operator not to be recognized as regexp start (bug#79454). * test/lisp/progmodes/ruby-mode-resources/ruby.rb: Add example.
* ; even less test log spam from loadMattias Engdegård2025-09-121-4/+4
|
* Eglot: escape literal % characters in URIsSteven Allen2025-08-301-0/+4
| | | | | | | | | | | | | | | Escape literal % characters in Eglot URIs Otherwise, a literal % in a file-name will be interpreted (by the language server) as if it were a part of a percent-encoded sequence. See Bug#78984 for context on why `url-path-allowed-chars' cannot be changed to escape literal % characters. * lisp/progmodes/eglot.el (eglot--uri-path-allowed-chars): Escape %, remove the redundant variable definition. * test/lisp/progmodes/eglot-tests.el (eglot-test-path-to-uri-escape): test it.
* Fontify all comment delimiters in 'lua-ts-mode'john muhl2025-08-301-0/+5
| | | | | | | | | * lisp/progmodes/lua-ts-mode.el (lua-ts--comment-font-lock): Apply 'font-lock-comment-delimiter-face' to the entire span of initial dashes. In particular, this improves the appearance of LuaCATS and EmmyLua style annotations which use "---". * test/lisp/progmodes/lua-ts-mode-resources/font-lock.lua: Add tests. (Bug#79258)
* ; Add tests for 'lua-mode'john muhl2025-08-256-0/+1980
| | | | | | | | | * test/lisp/progmodes/lua-mode-resources/font-lock.lua: * test/lisp/progmodes/lua-mode-resources/hide-show.lua: * test/lisp/progmodes/lua-mode-resources/indent.erts: * test/lisp/progmodes/lua-mode-resources/movement.erts: * test/lisp/progmodes/lua-mode-resources/which-function.lua: * test/lisp/progmodes/lua-mode-tests.el: New file.
* Skip eglot-test-rust-completion-exit-function on embaMichael Albinus2025-08-221-0/+1
|
* ; cperl-mode.el: Indent labels only in code (Bug#79271)Harald Jörg2025-08-221-0/+22
| | | | | | | | | * lisp/progmodes/cperl-mode.el (cperl-indent-line): Make sure that labels are indented in code only * test/lisp/progmodes/cperl-mode-resources/cperl-indents.erts: Two new testcases for non-indentable "labels" in a regex pattern and a qw list
* ; cperl-mode.el: Fix fontification error with signaturesHarald Jörg2025-08-222-1/+8
| | | | | | | | | | | | | | | This fixes the second issue in Bug#79269. * lisp/progmodes/cperl-mode.el (cperl-init-faces): Move handling of signatures with initializers from the "anchor" to the "anchored" matcher * test/lisp/progmodes/cperl-mode-resources/proto-and-attrs.pl (sub_7): Test case for Bug#79269, wrong face report * test/lisp/progmodes/cperl-mode-tests.el (cperl-test-fontify-attrs-and-signatures): Make sure that the test catches sub_7 for Bug#79269
* rust-ts-mode: handle invalid rust syntax without signalingSteven Allen2025-08-212-0/+14
| | | | | | | | | | | | | | Don't signal an error when encountering invalid rust syntax. Without this patch, invalid rust code would prevent a chunk of the buffer from being highlighted (bug#79272). * lisp/progmodes/rust-ts-mode.el (rust-ts-mode--fontify-scope): (rust-ts-mode--fontify-pattern): Avoid calling `string-match-p' on nil when a node is missing a parent. * test/lisp/progmodes/rust-ts-mode-resources/font-lock-no-parent.rs: Rust file that reproduces the issue. * test/lisp/progmodes/rust-ts-mode-tests.el: Test case to reproduce the issue.
* ; cperl-mode.el: fix indentation for multiline signaturesHarald Jörg2025-08-212-0/+28
| | | | | | | | | | | | | | | | This fixes the first (and more important) part of Bug#79269. * lisp/progmodes/cperl-mode.el (cperl-get-state): Replace `beginning-of-defun' by `beginning-of-defun-raw'. Also fix a typo in the docstring. * test/lisp/progmodes/cperl-mode-tests.el (test-indentation): Skip tests unless in cperl-mode. The test file cperl-indents.erts explicitly invokes cperl-mode. Due to different indentation defaults the tests do not pass in perl-mode. * test/lisp/progmodes/cperl-mode-resources/cperl-indents.erts: Add test cperl-subroutine-signatures for Bug#79269
* Fix lua-ts-mode-tests.elElijah Gabe Pérez2025-08-141-0/+1
| | | | | * test/lisp/progmodes/lua-ts-mode-tests.el (lua-ts-test-auto-close-block-comments): Skip when needed.
* Add multi-character pairs to lua-ts-mode and texinfo-modeElías Gabriel Pérez2025-08-091-0/+33
| | | | | | | | | | | | | * etc/NEWS: Add entry for lua-ts-mode changes. * lisp/progmodes/lua-ts-mode.el (lua-ts-auto-close-block-comments): New user option. (lua-ts-mode): Add '--[[ ]]' pairs to 'electric-pair-pairs' only if 'lua-ts-auto-close-block-comments' is non-nil. * lisp/textmodes/texinfo.el (texinfo-mode): Add "`` ''" pairs to 'electric-pair-pairs'. * test/lisp/progmodes/lua-ts-mode-tests.el (lua-ts-test-auto-close-block-comments): Add new test. (Bug#79047)
* Fix Python PDB tracking for remote inferior Pythonkobarity2025-08-071-0/+26
| | | | | | | | | | | | | | * lisp/progmodes/python.el (python-shell-local-prefix): New constant. (python-shell--convert-file-name-to-send): New function to add/remove prefix. (python-shell-send-string, python-shell-send-file): Changed to use 'python-shell--convert-file-name-to-send'. (python-pdbtrack-set-tracked-buffer): Changed to add/remove prefix. * test/lisp/progmodes/python-tests.el (python-shell--convert-file-name-to-send-1): New test. (Bug#79036)
* Improve region deletion handling in python.elJakub Ječmínek2025-08-021-0/+18
| | | | | | | | | * lisp/progmodes/python.el (python-indent-dedent-line-backspace): Delete the text in the region if Transient Mark mode is enabled, the mark is active, and prefix arg is 1. (Bug#48695) * test/lisp/progmodes/python-tests.el (python-indent-dedent-line-backspace-4): Add new test.
* cperl-mode.el: Support syntax of Perl version 5.42Harald Jörg2025-07-282-7/+14
| | | | | | | | | | | | | | | | | | | | | | * lisp/progmodes/cperl-mode.el (cperl--sub-name-generated-rx): Simplify captures to account for the :writer attribute. Parsing is done later. (cperl-imenu-sub-keywords): Remove attributes which generate subs (cperl-imenu--create-perl-index): Analyze field declarations for autogenerated methods (cperl-init-faces): Add "all" and "any" to the list of functions (cperl-short-docs): Add short docs for "all" and "any" * test/lisp/progmodes/cperl-mode-tests.el (cperl-test-autogenerated-reader-rx): Adjust for modified rx form due to ":writer" support (cperl-test-imenu-index): Add tests for autogenerated writer accessors (in grammar.pl) * test/lisp/progmodes/cperl-mode-resources/grammar.pl: Add code samples for ":writer" * etc/NEWS: Announce that CPerl mode supports Perl 5.42.
* (peg-parse): Fix bug#78884Stefan Monnier2025-06-271-0/+7
| | | | | | | * lisp/progmodes/peg.el (peg-parse): Be more careful when testing if a symbol is the name of an existing rule. Improve docstring. test/lisp/progmodes/peg-tests.el (peg-tests--peg-parse): New test.
* Improve eglot tests on embaMichael Albinus2025-06-201-1/+3
| | | | | | | | * test/infra/gitlab-ci.yml (test-eglot): Use packages company and yasnippet. * test/lisp/progmodes/eglot-tests.el (eglot--call-with-timeout): Skip on emba in case of timeout. (Bug#78730)
* Fix typescript-ts-mode tenary indentation (bug#77901)Yuan Fu2025-06-011-0/+5
| | | | | | | | | | | | | | | | | | | | | Fixes indentation for nested ternary expressions: const a = cond1 ? 1 : cond2 ? 2 : cond3 ? 3 : cond 4: 5; instead of const a = cond1 ? 1 : cond2 ? 2 : cond3 ? 3 : cond 4: 5; * lisp/progmodes/typescript-ts-mode.el: (typescript-ts--standalone-parent-p): New function. (typescript-ts-mode): (tsx-ts-mode): Use new function.
* Merge from origin/emacs-30Eli Zaretskii2025-05-311-0/+25
|\ | | | | | | | | 1d2ae31b8bc typescript-ts-mode: Improve function body indentation (bu... 421ecbcf6b4 ; * CONTRIBUTE: Explain the line-width preferences.
| * typescript-ts-mode: Improve function body indentation (bug#78121)Konstantin Kharlamov2025-05-251-0/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Older code was calculating body indentation depending on function parameters alignment. This is incorrect, because if parameters are misaligned, so will the function body. Instead, use offset of the previous standalone parent. * lisp/progmodes/typescript-ts-mode.el: (typescript-ts-mode--indent-rules): Stop depending on function parameters indentation for calculating body content and the closing `}'. * test/lisp/progmodes/typescript-ts-mode-resources/indent.erts: (Function body with params misindented (bug#78121)): Add new test.
* | Check diagnostic types in compile-testsMattias Engdegård2025-05-221-175/+180
| | | | | | | | | | | | | | * test/lisp/progmodes/compile-tests.el (compile-tests--test-regexps-data, compile--test-error-line) (compile-test-functions): Check the types (error, warning or info) for most patterns. Use names instead of numbers in the reference.
* | Support Rust compiler messages in compile mode (bug#70794).Vincenzo Pupillo2025-05-221-3/+12
| | | | | | | | | | | | | | | | | | | | | | * etc/compilation.txt: Add examples of Rust compiler error, warning and note messages. * lisp/progmodes/compile.el (compilation-error-regexp-alist-alist): Add Rust regexps for error, warning and note messages. * test/lisp/progmodes/compile-tests.el (compile-tests--test-regexps-data): Add new test cases. (compile-test-error-regexps): Increase expected errors.
* | Merge from origin/emacs-30Eli Zaretskii2025-05-171-0/+9
|\ \ | |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 299d3a44012 Fix saving abbrevs by 'abbrev-edit-save-buffer' 399d05332ed ; Remove confusing text from ELisp manual feecb1fbc60 ; * doc/emacs/cmdargs.texi (General Variables): More accu... 18e1aabbeaa ; Improve documentation of the -L command-line option c80fbe3f235 typescript-ts-mode: align ternary-chain branches (bug#78187) 16bfbc6fe31 ; Tramp test fixes f0ac271da38 ; Time Stamps doc: Clearer customize recipe 49c06df224a ; * doc/lispref/variables.texi (Default Value): Update. cbea5997c07 ; * lisp/mh-e/mh-e.el: Commentary: link to The MH-E Manual 0bf956235e3 Improve Tramp test eaf01d034c0 * lisp/autorevert.el (auto-revert-remote-files): Adapt do... e32bb816adb ; Improve documentation of ls-lisp.el 2d5f2434706 ; * lisp/emacs-lisp/comp.el (native-compile-prune-cache):... bb735331650 Improve Electric Pair mode documentation (bug#78021)
| * typescript-ts-mode: align ternary-chain branches (bug#78187)Konstantin Kharlamov2025-05-151-0/+9
| | | | | | | | | | | | | | | | * lisp/progmodes/typescript-ts-mode.el: (typescript-ts-mode--indent-rules): Make sure each new ternary branch is aligned with the previous one. * test/lisp/progmodes/typescript-ts-mode-resources/indent.erts: (Chained ternary expressions): New test.
* | Fix test-regressions in python-ts-modeJostein Kjønigsen2025-05-051-5/+23
| | | | | | | | | | | | | | | | | | | | * lisp/progmodes/python.el (python--treesit-settings): Use more specific selectors for constants. * test/lisp/progmodes/python-tests.el (python-ts-mode-nested-types-face-1) (python-ts-mode-union-types-face-1) (python-ts-mode-union-types-face-2): None is now a constant.
* | Improve elixir-ts--thing-settings.Juri Linkov2025-05-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/progmodes/elixir-ts-mode.el (elixir-ts--thing-settings): Add extra grouping "keywords" to named sexp nodes. Add "," to anonymous sexp nodes. Use bos/eos. * lisp/progmodes/ruby-ts-mode.el (ruby-ts-mode): Use bos/eos for anonymous sexp nodes for better disambiguation. * test/lisp/progmodes/heex-ts-mode-tests.el (heex-ts-mode-test-indentation): Skip the test when 'elixir' is missing since 'heex-ts-mode' depends on the 'elixir' grammar.
* | Avoid adding duplicate items to 'treesit-language-source-alist'.Juri Linkov2025-05-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/textmodes/mhtml-ts-mode.el: * lisp/progmodes/php-ts-mode.el: Use 'add-to-list' on items in language-source-alist that should check for duplicate items. * test/infra/Dockerfile.emba: Move multi-language mhtml-ts-mode and php-ts-mode to the end to give their dependent grammars a lower priority. * test/lisp/progmodes/js-tests.el (js-ts-mode-test-indentation): Skip the test when 'jsdoc' is missing since 'js-ts-mode' depends on the 'jsdoc' grammar.
* | Fix Python block end predicates (bug#77941)kobarity2025-04-261-0/+18
| | | | | | | | | | | | | | | | * lisp/progmodes/python.el (python-info-statement-ends-block-p) (python-info-end-of-block-p): Add consideration of comments. * test/lisp/progmodes/python-tests.el (python-info-statement-ends-block-p-3) (python-info-end-of-block-p-3): New tests.
* | Merge from origin/emacs-30Michael Albinus2025-04-191-14/+14
|\ \ | |/ | | | | | | 2a45f0bceba * lisp/progmodes/heex-ts-mode.el (heex-ts): Fix :group name. 9750333dde9 Fix typescript-ts-mode indentation (bug#77803)
| * Fix typescript-ts-mode indentation (bug#77803)Konstantin Kharlamov2025-04-181-14/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Don't align variable names to their declaratory expression. Before this commit in code like: const a = 1, b = 2; the b would get indented to `const'. Similarly for `var' and `let'. The expected behavior instead is getting indented to `typescript-ts-mode-indent-offset'. * lisp/progmodes/typescript-ts-mode.el (typescript-ts-mode--indent-rules): Indent identifiers declarations to `typescript-ts-mode-indent-offset'. * test/lisp/progmodes/typescript-ts-mode-resources/indent.erts (Lexical and variable declarations): Update test accordingly.
* | ; Fix 'lua-ts-mode' tests (Bug#77102)john muhl2025-03-201-9/+9
| | | | | | | | | | | | * test/lisp/progmodes/lua-ts-mode-resources/indent.erts: Remove unintended use of tabs and make indentation settings buffer local.
* | indent.erts (Code): Don't modify the global stateStefan Monnier2025-03-191-2/+2
| | | | | | | | | | | | * test/lisp/progmodes/java-ts-mode-resources/indent.erts (Code): Use `setq-local` and correspondingly move the remaining assignment after activating the major mode.
* | ; Fix 'java-ts-mode' tests (Bug#77070)john muhl2025-03-171-1/+1
| | | | | | | | | | * test/lisp/progmodes/java-ts-mode-resources/indent.erts: Set 'indent-tabs-mode' later.
* | Use c-ts-common baseline rule in java-ts-mode (bug#75154)Yuan Fu2025-03-161-0/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use it for function parameters. * lisp/progmodes/java-ts-mode.el: (java-ts-mode--standalone-predicate): New function. (java-ts-mode--indent-rules): Comment out rules for function parameters and statements, and add c-ts-common-baseline-indent-rule as fallback. (java-ts-mode): Setup. (java-ts-mode--first-line-on-multi-line-string): Mark BOL as unused. * test/lisp/progmodes/java-ts-mode-resources/indent.erts: New test.
* | Simplify and improve indent rules in 'lua-ts-mode'john muhl2025-03-131-273/+531
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/progmodes/lua-ts-mode.el (c-ts-common): Require it. (lua-ts-mode): Set 'c-ts-common' variables. (lua-ts--simple-indent-rules): Replace custom indent rules for tables, arguments and parameters with 'c-ts-common-baseline-indent-rule'. Improve consistency of indentation for IIFEs and nested functions. (lua-ts--variable-declaration-continuation) (lua-ts--variable-declaration-continuation-anchor): Reformat. (lua-ts--comment-first-sibling-matcher) (lua-ts--first-child-matcher, lua-ts--first-real-sibling-anchor) (lua-ts--function-definition-p, lua-ts--g-g-g-parent) (lua-ts--g-g-parent, lua-ts--nested-function-argument-matcher) (lua-ts--nested-function-block-include-matcher) (lua-ts--nested-function-block-matcher) (lua-ts--nested-function-end-argument-matcher) (lua-ts--nested-function-end-matcher) (lua-ts--nested-function-last-function-matcher) (lua-ts--top-level-function-call-matcher): Remove. * test/lisp/progmodes/lua-ts-mode-resources/indent.erts: Update tests. (Bug#76986)
* | Merge from origin/emacs-30Sean Whitton2025-03-121-0/+19
|\ \ | |/ | | | | | | | | | | | | 894b0e3a2fe ; Adapt comment in tramp.el cc87717fa07 Add keyword placeholder to tramp.el 7d0d61d8549 Rewrite ERT manual introduction b2f124f2a88 ; cperl-mode.el: Don't misinterpret exec_fcn as keyword exec 59d1aac49df Document return values of the various read-* functions
| * ; cperl-mode.el: Don't misinterpret exec_fcn as keyword execHarald Jörg2025-03-091-0/+19
| | | | | | | | | | | | | | | | | | * lisp/progmodes/cperl-mode.el (cperl-after-block-and-statement-beg): Recognize _ as part of a Perl symbol. Fixes Bug#76851 * test/lisp/progmodes/cperl-mode-resources/cperl-indents.erts Two new test cases around the edges of Bug#76851
| * ; Cleanup sexp things in 'lua-ts-mode'john muhl2025-03-011-4/+54
| | | | | | | | | | | | | | * lisp/progmodes/lua-ts-mode.el (lua-ts-mode): Remove some nonsensical entries from 'treesit-thing-settings'. * test/lisp/progmodes/lua-ts-mode-resources/movement.erts: Add missing tests for 'backward-sexp'. (Bug#76534)
* | (makefile-dependency-regex): Fix bug#76759Stefan Monnier2025-03-091-0/+42
| | | | | | | | | | | | | | | | | | * lisp/progmodes/make-mode.el (makefile-dependency-regex): Decompose the regexp to be more understandable, and then change it so the target part can't accidentally match a TAB. * test/lisp/progmodes/make-mode-tests.el (make-mode-tests--bug17400): New test.
* | Use TS to support 'hs-minor-mode' in 'lua-ts-mode'john muhl2025-03-082-0/+56
| | | | | | | | | | | | | | | | | | | | * lisp/progmodes/lua-ts-mode.el (lua-ts-mode): Add list type to 'treesit-thing-settings'. * lisp/progmodes/hideshow.el (hs-special-modes-alist): Remove regular expression based implementation. * test/lisp/progmodes/lua-ts-mode-resources/hide-show.lua: New file. * test/lisp/progmodes/lua-ts-mode-tests.el (lua-ts-test-hideshow): Add test. (Bug#76693)
* | Revert "Eglot: tests must work on 26.3"João Távora2025-03-081-1/+1
| | | | | | | | | | | | | | | | | | This reverts commit 331492a148588991af5ce9a24a2020b3d380e03f. My bad: gensym wasn't the problem, it's available from 26.1. Incf was the problem, in the main program file. * test/lisp/progmodes/eglot-tests.el (eglot--with-timeout): Back to gensym
* | Eglot: tests must work on 26.3João Távora2025-03-081-1/+1
| | | | | | | | | | | | | | | | | | ;; IMPORTANT: Since Eglot is a :core ELPA package, these tests are ;; supposed to run on Emacsen down to 26.3. Do not use bleeding-edge ;; functionality not compatible with that Emacs version. * test/lisp/progmodes/eglot-tests.el (eglot--call-with-timeout): Back to cl-gensym.
* | Merge from origin/emacs-30Eli Zaretskii2025-03-011-0/+6
|\ \ | |/ | | | | | | | | | | | | | | | | | | b531bbf73ef Fix go-ts-mode const_spec highlighting (Bug#76330) bd1d6761f4c ; Document what happens when 'display' and 'invisible' pr... 526eeedf889 keymaps.texi: Move "Changing Key Bindings" section up 7ec6531c7bd keymaps.texi: Move "Key Sequences" section down 8b804011275 Improve process-get/process-put docstrings 73c646b7771 Merge branch 'emacs-30' of git.sv.gnu.org:/srv/git/emacs ... 0af5c574998 Fix recent change in diff-no-select c8cec840d79 Prevent rare freeze on Android 4.2 through 4.4