/usr/share/gps/plug-ins/gnattest.py is in gnat-gps-common 5.3dfsg-1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | """This file provides support for gnattest.
"""
import os.path, GPS
GPS.Preference ("Plugins/gnattest/read_only_color").create (
"Highlight color", "color",
"""Background color for read-only areas""",
"#e0e0e0")
last_gnattest_project = None
def run (project, target, extra_args=""):
""" Run gnattest and switch to harness if success. """
global last_gnattest_project
last_gnattest_project = project
GPS.BuildTarget(target).execute(synchronous=False, extra_args=extra_args)
def is_harness_project ():
""" Check if root project is harness project. """
root_project = GPS.Project.root()
mapping = root_project.get_attribute_as_string ("GNATtest_Mapping_File",
package="GNATtest")
return mapping.strip() != ""
def open_harness_project (cur):
""" Open harness project if it hasn't open yet."""
if is_harness_project():
return
harness_dir = cur.get_attribute_as_string("Harness_Dir", "GNATtest")
if harness_dir == "" :
harness_dir = "gnattest/harness"
prj = os.path.join (cur.object_dirs()[0], harness_dir, "test_driver.gpr")
GPS.Project.load (prj, False, True)
GPS.Console ("Messages").write ("Switched to harness project: " +
GPS.Project.root().file().name() +"\n")
def exit_harness_project ():
""" Leave harness project and open user's project. """
root_project = GPS.Project.root()
for p in root_project.dependencies():
if p.name() != "AUnit":
for d in p.dependencies():
if d.name() != "AUnit":
user_project = d
break
GPS.Project.load (user_project.file().name(), False, True)
GPS.Console ("Messages").write ("Exit harness project: " +
GPS.Project.root().file().name() +"\n")
def on_compilation_finished(hook, category,
target_name="", mode_name="", status=""):
global last_gnattest_project
if not target_name.startswith("GNATtest"):
return
if status:
return
open_harness_project (last_gnattest_project)
def on_project_view_changed(hook):
""" Replace run target in harness project. """
test_run_target=GPS.BuildTarget ("Run a test-driver")
run_main_target=GPS.BuildTarget ("Run Main")
if is_harness_project():
run_main_target.hide()
test_run_target.show()
else:
run_main_target.show()
test_run_target.hide()
return
# Update read-only areas in already opened files
buffer_list = GPS.EditorBuffer.list()
for buffer in buffer_list:
mark_read_only_areas (buffer)
def on_file_edited (hook,file):
""" Find read-only areas and apply an overlay on them. """
if not is_harness_project():
return
buffer = GPS.EditorBuffer.get (file)
mark_read_only_areas (buffer)
def mark_read_only_areas (buffer):
read_only_overlay = None
loc = buffer.beginning_of_buffer ()
# Iterate over read-only areas
while loc:
found = loc.search ("-- begin read only", dialog_on_failure=False)
if found:
from_line,last = found
found = last.search ("-- end read only", dialog_on_failure=False)
if found:
to_line,loc = found
else:
loc = None
else:
loc = None
# if area found
if loc:
from_line = from_line.beginning_of_line ()
to_line = to_line.end_of_line ()
# if overlay hasn't exist yet, create one
if read_only_overlay == None:
read_only_overlay = buffer.create_overlay ()
color = GPS.Preference ("Plugins/gnattest/read_only_color").get ()
read_only_overlay.set_property ("paragraph-background", color)
read_only_overlay.set_property ("editable", False)
buffer.apply_overlay (read_only_overlay, from_line, to_line)
# No more read-only areas
GPS.Hook("file_edited").add (on_file_edited)
GPS.Hook("compilation_finished").add(on_compilation_finished)
GPS.Hook("project_view_changed").add(on_project_view_changed)
|