--- a
+++ b/tests/unit/docs/test_language.py
@@ -0,0 +1,37 @@
+import pytest
+
+from ehrql.docs.language import is_included_attr
+from ehrql.utils.docs_utils import exclude_from_docs
+
+
+class Example:
+    some_attr = "some_value"
+
+    def some_method(self):
+        raise NotImplementedError()
+
+    @property
+    def some_property(self):
+        raise NotImplementedError()
+
+    def _some_internal_method(self):
+        raise NotImplementedError()
+
+    @exclude_from_docs
+    def some_excluded_method(self):
+        raise NotImplementedError()
+
+
+@pytest.mark.parametrize(
+    "name,expected",
+    [
+        ("some_attr", False),
+        ("some_method", True),
+        ("some_property", True),
+        ("_some_internal_method", False),
+        ("some_excluded_method", False),
+    ],
+)
+def test_is_included_attr(name, expected):
+    value = getattr(Example, name)
+    assert is_included_attr(name, value) == expected