90 Commits

Author SHA1 Message Date
TomJGooding
156eb68ffc ci: remove allow-prereleases for Python 3.14
allow-prereleases is no longer needed for Python 3.14.
2025-10-09 11:36:10 +01:00
TomJGooding
1e03cac1b3 ci: add Python 3.14 to test matrix 2025-09-17 15:32:11 +01:00
TomJGooding
e053bee034 ci: drop tests for Python 3.8 2025-09-16 23:37:13 +01:00
TomJGooding
ac0bba9bd5 ci: bump actions/setup-python to v5
I noticed looking at recent workflow runs that there's a number of
warnings where the cache has failed to save/restore.

Apparently old versions of the actions cache service are now deprecated
(https://github.com/actions/setup-python/pull/1007).

Bumping actions/setup-python to v5 should hopefully fix the caching and
help speed up CI runs!
2025-08-06 17:53:14 +01:00
TomJGooding
90048cc38e ci: update python versions for syntax dependencies and tests
Update Python versions for syntax dependencies and tests in CI, as
tree-sitter no longer supports Python 3.9.
2025-07-21 11:21:23 +01:00
Will McGugan
2c79009945 Update bug_report.md 2025-07-11 12:10:31 +01:00
Will McGugan
97846f55ce Update config.yml 2025-07-11 12:09:51 +01:00
Will McGugan
3b8a27f8c4 Delete .github/ISSUE_TEMPLATE/task.md 2025-07-11 12:04:24 +01:00
Will McGugan
bac2a2dc90 Create config.yml 2025-07-11 11:59:55 +01:00
Will McGugan
fb3ba320b4 Delete .github/config.yml 2025-07-11 11:59:33 +01:00
Will McGugan
ec825e078e Create config.yml 2025-07-11 11:57:34 +01:00
Will McGugan
4f36f8f09c Update bug_report.md 2025-07-11 09:23:58 +01:00
Will McGugan
c1ba0d90a8 Update comment.yml 2025-06-23 10:27:10 +01:00
Will McGugan
8fa4a05378 Update new_issue.yml 2025-06-21 16:48:40 +01:00
Will McGugan
62df150059 Update comment.yml 2025-06-21 16:40:35 +01:00
Will McGugan
441805346b Update FUNDING.yml 2025-06-21 14:13:30 +01:00
Will McGugan
9d97b58759 Update bug_report.md 2025-02-13 09:49:49 +00:00
Will McGugan
a91d8cc8c9 overwrite 2025-02-07 16:07:49 +00:00
Will McGugan
5d0900cae6 artifact glitch 2025-02-07 16:05:09 +00:00
Will McGugan
9d6c2426a7 try this 2025-02-07 15:26:29 +00:00
Will McGugan
27bbddddf0 fix artifact 2025-02-06 19:14:50 +00:00
Darren Burns
ca496b4f56 tree-sitter upgrade (#5320)
* Using separate language packages and update lockfile

* Fixing some but not all languages

* Theme updates

* More theme fixes

* Improving the VS Code theme

* Fixes

* Fixing CSS rendering

* Fixing SQL and JavaScript highlight queries

* Update GitHub Actions to run syntax highlighting tests on 3.13, and avoid those tests on 3.8.

* Update CHANGELOG and remove `SyntaxAwareDocument.language_name` property.

* Remove unused Kotlin language syntax highlighting snapshot

* Update CHANGELOG to note that Kotlin syntax highlighting was removed

* Bail out of TextArea.language watcher early if tree-sitter is not installed

* Skip a test on 3.8 as it relates to syntax highlighting (tree-sitter) being available
2024-12-04 10:33:58 +00:00
TomJGooding
b0e9f2ebec ci: run tests with Python 3.13 2024-11-30 14:56:44 +00:00
Will McGugan
b276fd2de9 Update bug_report.md 2024-11-27 16:48:04 +00:00
TomJGooding
4182ad4bc0 ci: remove macos workaround for python versions (#5110) 2024-10-14 09:54:40 +01:00
TomJGooding
a596640660 chore(issue template): clarify textual command requires devtools (#4886) 2024-08-15 10:00:13 +01:00
Will McGugan
eee11ea7be exclude 3.11 2024-04-25 11:00:56 +01:00
Will McGugan
f0cca0b07f fix missing matrix Pythons 2024-04-24 19:03:28 +01:00
Darren Burns
fa4f75fd25 Text area undo redo (#4124)
* Initial undo related machinery added to TextArea

* Initial undo implementation

* Basic undo and redo

* Some more fleshing out of undo and redo

* Skeleton code for managing TextArea history

* Initial implementation of undo & redo checkpointing in TextArea

* Increase checkpoint characters

* Restoring the selection in the TextArea and then restoring it on undo

* Adding docstrings to undo_batch and redo_batch in the TextArea

* Batching edits of the same type

* Batching edits of the same type

* Keeping edits containing newlines in their own batch

* Checking for newline characters in insertion or replacement during undo checkpoint creation. Updating docstrings in history.py

* Fix mypy warning

* Performance improvement

* Add history checkpoint on cursor movement

* Fixing merge conflict in Edit class

* Fixing error in merge conflict resolution

* Remove unused test file

* Remove unused test file

* Initial testing of undo and redo

* Testing for undo redo

* Updating lockfile

* Add an extra test

* Fix: setting the `text` property programmatically should invalidate the edit history

* Improving docstrings

* Rename EditHistory.reset() to EditHistory.clear()

* Add docstring to an exception

* Add a pause after focus/blur in a test

* Forcing CI colour

* Update focus checkpoint test

* Try to force color in pytest by setting --color=yes in PYTEST_ADDOPTS in env var on Github Actions

* Add extra assertion in a test

* Toggle text_area has focus to trigger checkpoint in history

* Apply grammar/wording suggestions from code review

Co-authored-by: Rodrigo Girão Serrão <5621605+rodrigogiraoserrao@users.noreply.github.com>

* Making max checkpoints configurable in TextArea history

* Improve a docstring

* Update changelog

* Spelling fixes

* More spelling fixes

* Americanize spelling of tab_behaviour (->tab_behavior)

* Update CHANGELOG regarding `tab_behaviour`->`tab_behavior`

---------

Co-authored-by: Rodrigo Girão Serrão <5621605+rodrigogiraoserrao@users.noreply.github.com>
2024-02-14 13:11:14 +00:00
Will McGugan
5fa128e08e pin black 2024-01-29 17:13:20 +00:00
Rodrigo Girão Serrão
e1b94e4b66 Add 3.12 to CI (#3863)
Adds Python 3.12 to CI.
Because `tree-sitter`/`tree-sitter-languages` can't be installed on 3.12 yet, we need to run slightly different commands when installing dependencies/running tests on 3.12.

See for more context: https://github.com/Textualize/textual/issues/3491#issuecomment-1854156476
2023-12-14 10:42:18 +00:00
Darren Burns
5603a4da2b Fix GH Actions, remove Python 3.7, re-enable MacOS, remove old dev dependency (#3766)
* Fixing pytest running on incorrect Python version in GitHub actions.
Also removes 3.12 from the testing matrix, and enables MacOS again.

* Dropping Python 3.7

* Update required Python version to ^3.8

* Remove 3.7 asyncio compatibility layer

* Version pinning in GitHub Action
2023-11-29 14:05:25 +00:00
Will McGugan
f0fd8d47e1 bump lock file (#3643)
* bump lock file

* pin aiohttp

* drop 3.12 for now

* try bump setup-python

* drop 3.7

* bump aiohttp

* lock

* drop macos
2023-11-07 14:37:31 +00:00
Rodrigo Girão Serrão
375211ce38 Run CodeQL only on code changes. (#3573) 2023-10-23 13:36:26 +01:00
Darren Burns
d2320f11fc Move tree-sitter and tree_sitter_languages to optional extras (#3398)
* Move tree-sitter and tree_sitter_languages to optional extras

* Update docs and GitHub action for moving syntax to extras

* Updating, remake lockfile

* Update snapshots from textual-dev change

* Improve warning when a language is set but tree-sitter not available

* Update CHANGELOG

* Add note on syntax extras

* Update lock
2023-10-09 10:57:13 +01:00
Darren Burns
bbde62fc57 Text area (#2931)
* Add docstring and switch to tree-sitter-languages wheels - although the wheels arent working

* Adding highlights files

* Fix index error on SyntaxAwareDocument

* Narrowing highlighting scope

* Adding basic highlights for Markdown

* Using utf-8 byte length instead of codepoint count in syntax aware doc

* Start creating an ABC defining functionality required by Document impls

* Simplify tree-sitter logic

* Extracting more ABC

* Fix width calculation, add SyntaxTheme

* Ensure the highlight line style goes right to the very end

* Updating a docstring

* Renaming, and adding document width guide

* Ensuring that line number column toggling refreshes virtual size

* Ensuring that line number column toggling refreshes virtual size

* Width guide

* Fix focus event stopping

* Use release_mouse

* Improving a docstring

* Remove bash

* TextArea language snapshot testing

* Updating snapshots for TextArea since we now highlight more nodes

* Typing fixes

* Testing

* Adding tests

* Fixing language selection

* Refresh size on indent width change

* Testing, renaming, fixing display of selection

* Fix multibyte highlight glitch

* Fix deleting right with selection at end of document in TextArea

* Fixing utf-8 multibyte character issues

* Default location of text insertion is cursor position, add cursor_location properties

* Removing some debugging code

* Cursor location tests

* Updating snapshots

* Cached utf8 encoding

* TextArea selection snapshot testing

* Tidying docstrings and queries

* Updating selection snapshot output

* Binding for ESC to shift focus

* Only build the tree-sitter query once!

* Expand cursor scroll horizontal leeway in TextArea

* Property setter for cursor_location in TextArea shouldnt return value

* Avoiding NamedTuple subclassing - using type aliasing instead

* Tidying API, docstrings etc.

* Tidying the API and docstrings

* TextArea additional cursor tests

* Testing pageup and pagedown in TextArea

* Fix a faulty test

* Docstring in a test for TextArea edit

* Stop using DEFAULT_SYNTAX_THEME

* Docstrings

* Change cursor_destination to move_cursor, add more tests

* Remove faulty assertion

* Tidying cursor movement

* Tidying up, adding docstrings for component classes

* Fix a broken selection test

* Remove some unused highlighting machinery

* Fix some Python highlighting issues

* Make HTML syntax highlight nicely

* Create tag name for mismatching HTML end tag

* Add styling for YAML, update boolean styling

* Stylising toml types

* Styling floats

* JSON syntax highlighting

* Updating snapshots

* Syntax highlighting datetimes in TOML

* Namespace TOML errors in highlighting

* Add a move_cursor_relative method

* Update TOML TextArea snapshot for datetime highlighting support

* Adjusting selections

* At TextArea widget level, delete_range is insert_range of empty string

* Refactoring

* Dunder all, docstring fix

* Fix XFAIL

* Remove unused import

* More tests, tidying up

* Cleaning the API

* Docstrings for TextArea

* A bunch of docstrings, delete unused code

* More tidying and docstrings

* Cursor origin on document load, correctly handle delete word left/right when selection is non-empty, fix delete_line when selection spans multiple lines and is in reverse direction

* Moving things around

* Fixing dunder all to export DocumentBase

* Add docstring

* Record cursor width on programmatic insert since it can result in the cursor moving

* Typing fixes

* Fixing remaining typing issues with TextArea

* Add tree-sitter-languages stubs and fix typing issues in documents

* Fixing remaining typing issues with document

* Updating Syntax themes

* Improve highlighting, add initial TextArea docs page

* Add TextArea indent note

* Start TextArea guide inside reference

* Add TextArea to widget gallery

* Fleshing out TextArea docs

* Add note

* Fix TextArea programmatic insert/cursor interaction

* Improve a test

* Testing replacement within selection

* Testing double-width character keyboard navigation and deletion keybinds with active selections

* Testing "delete to start of line" TextArea binding

* Testing TextArea delete line methods and delete to end of line

* Testing shift selecting using keyboard in vertical direction

* Expand tests for home and end keybinds in TextArea

* Renaming tests, testing empty replace and insert

* Testing delete word left via API

* Testing delete word left via API

* Testing delete_word_left with tabs, and delete_word_right

* Remove unused variables

* Remove debugging width guide

* Fix snapshot report path

* Deleting word left/right interaction with line ends fixes, ensure cursor width recorded on all edits

* Docstring fixes

* Unpin textual snapshot library dependency (issue is fixed)

* Docstring fixes

* Fix recording cursor width

* Fix a docstring

* Add select_all to TextArea

* Remove unused tree-sitter stuff from .gitignore

* Line select

* Make word pattern private in TextArea

* Add blinking cursor to TextArea

* Renaming, adding missing return typing

* Add selection bindings

* Moving cursor left/right by word while selecting

* Change escape keybind description, TextArea

* Stripping whitespace when going word left/right

* Add missing annotation

* Cursor word right and left parity with PyCharm

* Use repaint=False for cursor blink

* Improve focus/blur styling

* A whole bunch of TextArea testing

* Simplify delete_left and delete_right

* Testing hiding line numbers in snapshot

* Adding snapshot test for unfocus styling

* Create initial snapshot for text-area unfocused

* Support shift+home, shift+end

* Document shift+home, shift+end

* Add Dracula syntax highlighting theme

* Small change to delete_line behaviour when multiple lines selected to match vscode/pycharm behaviour

* Add test for new delete line logic

* Delete line improvement

* Add extra test for delete_line multiple selection

* Test cursor "smart" home behaviour

* Fix typo

* Highlight matching brackets

* Update snapshot

* Update snapshot

* Fix xfails

* Simplify delete_word_left

* Catch correct exception to ensure support for Python 3.7

* Add styling for Markdown

* Add styles for Dracula for Markdown

* Remove unused _fix_direction.py

* Add docstring to EditResult

* Use default=0 in max inside Document

* Remove redundant actions

* Use cell-width aware expand tabs implementation from @willmcgugan

* Construct strip with cell length

* Some TextArea keyword-only arguments

* Begin moving over to TextAreaTheme #skipci

* Prepare queries inside document #skip-ci

* Add comment

* Refactoring

* TextAreaTheme styling

* Setting width of blank selected lines

* Building the highlight map in the text area

* Remove unused default css from TextArea

* Moving highlighting stylize into widget

* Moving syntax highlighting into TextArea widget

* Remove unused code

* Optimise imports

* Fix highlighting when initial text supplied to TextArea

* Rebuild highlight map when the theme changes

* Extending

* Restore themes

* Remove old comment, fix docstring

* Fixing docstrings

* Fixing mypy

* Fixing mypy issues in document

* Tidying things

* Updating version

* Add theme

* Fix VSCode theme bracket matching

* Only match brackets when theres no selection

* Highlighting tidying

* Fix markdown header highlighting

* Setting theme correctly in background

* Tidying module interface

* Merging main

* Fixing a bunch of typing problems

* Fixing more typing problems

* Correctly setting theme object

* mypy

* Small fix to bracket matching

* Improve a docstring

* Fix docstring

* Testing builtin and custom languages

* Unit testing theme stuff

* Reworking themes

* Error handling

* Improve error message

* Testing new theme setting approach, error handling

* Improvements/tests for theme and language setting

* Remove unused TextArea unfocus snapshot

* Update snapshot file

* Adding theme snapshot tests

* Add `function.call` style binding in dark vscode theme

* Renaming a test file

* Making active line clearer on vscode theme

* Renaming tests

* A whole lot of docs for TextArea

* Update wording in docs

* A bit more docs

* Example on adding Java as a custom language

* More custom language docs

* Finishing up custom themeing/syntax highlighting guide for TextArea

* Add note on potential issue

* Fix wording

* Add note on Apple Silicon Python 3.7 fallback

* Add another note on Apple Silicon Python 3.7 fallback

* Fix class names in example files

* Add some documentation for useful TextArea APIs

* TextArea docs improvements

* TextArea docs typo fix

* Note about extending TextArea

* Tab-stop support when spaces used for indent

* Docs update

* Text area blog post (#3356)

* Start blog post

* Add demo script to blog post

* Continuing the blog post

* Yet more writing for TextArea blog post

* Working on closing section

* Finishing up

* Update docs/blog/posts/text-area-learnings.md

Co-authored-by: Dave Pearson <davep@davep.org>

* Update docs/blog/posts/text-area-learnings.md

Co-authored-by: Dave Pearson <davep@davep.org>

* Typo fix

* Update docs/blog/posts/text-area-learnings.md

Co-authored-by: Dave Pearson <davep@davep.org>

---------

Co-authored-by: Dave Pearson <davep@davep.org>

* Remove redundant pass

* Add docstring

* Docs fix

* Simplify docs

* Improve docstring

* Add links in docstrings

---------

Co-authored-by: Dave Pearson <davep@davep.org>
2023-09-21 11:10:14 +01:00
Darren Burns
74aa90f5ac Add Python 3.12 to CI suite (#3255) 2023-09-10 14:58:33 +01:00
Will McGugan
65e81c58be Textual dev (#2884)
* WiP: Move the devtools and related code to `textual-dev` (#2834)

* Remove the textual script from the project file

This is moving into the textual-dev package.

* Remove the textual CLI code from Textual

This has all gone to live in textual-dev.

* Remove the devtools testing from Textual's unit tests

They've moved over to textual-dev instead.

* Remove the devtools server from Textual itself

The start of the process to remove as much of the core devtools as possible
from Textual.

* Switch the console docs example screenshot over to textual_dev

* Remove rednerables.py from Textual

* Remove the last parts of devtools from Textual

This is the last step. It remains to be seen if this is sustainable, but for
testing purposes this is the extreme case we're aiming for. I *think* this
will work though.

Hereon we'll be needing to do an editable install of textual-dev into
textual, and more generally and once this is "live" we'll be needing to make
sure that textual[dev] is installed when doing development work on textual
apps.

The thing that remains to be seen however is how this all works
with *developing* Textual itself. Will I always need to do an editable
install? Still got to figure that one out.

* Start to whittle down the pyproject file

The next step is to try and work out what can come out of the pyproject
file.

* Remove aiohttp from Textual

* Remove some more development dependencies we don't need any more

* Relock

* Remove the pointer to the previews directory

* Reintroduce the border preview snapshot test

* Reintroduce the color preview snapshot test

* Reinstate the key press for the border preview snapshot test

* Reintroduce the easing preview snapshot test

* Reintroduce the keys tool snapshot test

* Add pytest-asyncio as a development dependency

* Relock

* Pin the textual-dev version to 0.1.0 or later

Mostly to try and get the tests kicked off properly.

* Relock dependencies

* Further `textual-dev` changes (#2850)

* Remove the textual script from the project file

This is moving into the textual-dev package.

* Remove the textual CLI code from Textual

This has all gone to live in textual-dev.

* Remove the devtools testing from Textual's unit tests

They've moved over to textual-dev instead.

* Remove the devtools server from Textual itself

The start of the process to remove as much of the core devtools as possible
from Textual.

* Switch the console docs example screenshot over to textual_dev

* Remove rednerables.py from Textual

* Remove the last parts of devtools from Textual

This is the last step. It remains to be seen if this is sustainable, but for
testing purposes this is the extreme case we're aiming for. I *think* this
will work though.

Hereon we'll be needing to do an editable install of textual-dev into
textual, and more generally and once this is "live" we'll be needing to make
sure that textual[dev] is installed when doing development work on textual
apps.

The thing that remains to be seen however is how this all works
with *developing* Textual itself. Will I always need to do an editable
install? Still got to figure that one out.

* Start to whittle down the pyproject file

The next step is to try and work out what can come out of the pyproject
file.

* Remove aiohttp from Textual

* Remove some more development dependencies we don't need any more

* Relock

* Remove the pointer to the previews directory

* Reintroduce the border preview snapshot test

* Reintroduce the color preview snapshot test

* Reinstate the key press for the border preview snapshot test

* Reintroduce the easing preview snapshot test

* Reintroduce the keys tool snapshot test

* Add pytest-asyncio as a development dependency

* Relock

* Pin the textual-dev version to 0.1.0 or later

Mostly to try and get the tests kicked off properly.

* Relock dependencies

* Whitespace cleaning

* Swap mentions of textual[dev] to textual-dev

* Remove the dev extra

* Tweak README.md in response to PR review

* Tweak animation.md in response to PR review

* Tweak getting_started.md in response to PR review

* bump version

* lock

* drop dev

* more

* version bump

---------

Co-authored-by: Dave Pearson <davep@davep.org>
2023-07-03 15:37:40 +01:00
Jorge
e4523127a9 Add CodeQL workflow (#2882) 2023-07-03 14:17:16 +01:00
Rodrigo Girão Serrão
a9a04dc37a Run workflows when they are changed.
Related comments: https://github.com/Textualize/textual/pull/2577\#issuecomment-1549411724
2023-05-16 11:43:31 +01:00
Rodrigo Girão Serrão
9b09b19e5f Update workflows.
This caches the virtual environment so we don't have to download it every time (the cache can be cleared from the repository > Actions > Caches (on the left).

We also split black formatting into a separate workflow.
This means we can run black ONLY when *.py files are changed.
It also means all other testing jobs don't need to _also_ check formatting.
2023-05-16 10:18:30 +01:00
Dave Pearson
9dda90ea75 Extend testing to some more files
In this case the snapshot data, the lock file and the Makefile.
2023-05-02 13:07:47 +01:00
Dave Pearson
a8d2724873 Attempt to narrow CI/test trigger to just code changes
Looking at
https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request
I *think* this might be the approach to take. Consider this an experimental
change that will very likely get rolled back.

See #2404
2023-05-02 12:52:51 +01:00
Will McGugan
832d191bd3 bump poetry (#2447) 2023-05-01 15:35:58 +01:00
Will McGugan
80ae6ce4d9 Update task.md 2023-02-27 16:19:31 +00:00
Rodrigo Girão Serrão
94157eae59 Skip FAQtory on new issues by Textualize members
Fix #1617 (excellent idea).
2023-01-20 15:47:13 +00:00
Will McGugan
c6909b76c4 update bug report template 2023-01-19 14:50:30 +00:00
Dave Pearson
01e6ae43d0 Sanitise issue titles before running suggest on them
Applying
https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#using-an-intermediate-environment-variable
to #1472.
2023-01-06 06:43:41 +00:00
Will McGugan
c20bf664e8 Update bug_report.md 2022-12-18 10:22:36 +00:00
Will McGugan
3cfebb0423 Added faqtory 2022-12-18 09:50:44 +00:00