Skip to content

Commit a2b4269

Browse files
[dotnet] Add syntax highlighting for JavaScript string methods (#16616)
* [dotnet] Add syntax highlighting for JavaScript string methods * Use const for JavaScript * Avoid ifdef in the support package * Add const to support package too * Work around internal issue * Fix bazel build * fix whitespace * Fix path to internal file * Use glob to indicate direct file * Fix file visibility * Fix reference to StringSyntaxConstants as well * Fix build format * Fix build once more
1 parent e261a3c commit a2b4269

17 files changed

+175
-23
lines changed

dotnet/BUILD.bazel

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,12 @@ pkg_zip(
2626
"release-artifact",
2727
],
2828
)
29+
30+
filegroup(
31+
name = "source_files_support_needs_from_core",
32+
srcs = [
33+
"//dotnet/src/webdriver:Internal/StringSyntaxAttribute.cs",
34+
"//dotnet/src/webdriver:Internal/StringSyntaxConstants.cs",
35+
],
36+
visibility = ["__subpackages__"],
37+
)

dotnet/src/support/BUILD.bazel

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ csharp_library(
3232
"Events/*.cs",
3333
"Extensions/*.cs",
3434
"UI/*.cs",
35-
]) + [":assembly-info"],
35+
]) + [
36+
":assembly-info",
37+
"//dotnet:source_files_support_needs_from_core",
38+
],
3639
out = "WebDriver.Support",
3740
langversion = "12.0",
3841
nullable = "enable",
@@ -71,7 +74,10 @@ csharp_library(
7174
"Events/*.cs",
7275
"Extensions/*.cs",
7376
"UI/*.cs",
74-
]) + [":assembly-info"],
77+
]) + [
78+
":assembly-info",
79+
"//dotnet:source_files_support_needs_from_core",
80+
],
7581
out = "WebDriver.Support.StrongNamed",
7682
keyfile = "//dotnet:Selenium.snk",
7783
langversion = "12.0",

dotnet/src/support/Events/EventFiringWebDriver.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@
2020
using System;
2121
using System.Collections.Generic;
2222
using System.Collections.ObjectModel;
23+
using System.Diagnostics.CodeAnalysis;
2324
using System.Drawing;
2425
using System.Threading.Tasks;
26+
using OpenQA.Selenium.Internal;
2527

2628
namespace OpenQA.Selenium.Support.Events;
2729

@@ -442,7 +444,7 @@ public void Dispose()
442444
/// variable, as if the function were called via "Function.apply"
443445
/// </para>
444446
/// </remarks>
445-
public object? ExecuteScript(string script, params object?[] args)
447+
public object? ExecuteScript([StringSyntax(StringSyntaxConstants.JavaScript)] string script, params object?[] args)
446448
{
447449
if (this.WrappedDriver is not IJavaScriptExecutor javascriptDriver)
448450
{
@@ -542,7 +544,7 @@ public void Dispose()
542544
/// <param name="script">The JavaScript code to execute.</param>
543545
/// <param name="args">The arguments to the script.</param>
544546
/// <returns>The value returned by the script.</returns>
545-
public object? ExecuteAsyncScript(string script, params object?[] args)
547+
public object? ExecuteAsyncScript([StringSyntax(StringSyntaxConstants.JavaScript)] string script, params object?[] args)
546548
{
547549
if (this.WrappedDriver is not IJavaScriptExecutor javascriptDriver)
548550
{

dotnet/src/support/Events/WebDriverScriptEventArgs.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
// </copyright>
1919

2020
using System;
21+
using System.Diagnostics.CodeAnalysis;
22+
using OpenQA.Selenium.Internal;
2123

2224
namespace OpenQA.Selenium.Support.Events;
2325

@@ -32,7 +34,7 @@ public class WebDriverScriptEventArgs : EventArgs
3234
/// <param name="driver">The WebDriver instance used to execute the script.</param>
3335
/// <param name="script">The script executed by the driver.</param>
3436
/// <exception cref="ArgumentNullException">If <paramref name="driver"/> or <paramref name="script"/> are <see langword="null"/>.</exception>
35-
public WebDriverScriptEventArgs(IWebDriver driver, string script)
37+
public WebDriverScriptEventArgs(IWebDriver driver, [StringSyntax(StringSyntaxConstants.JavaScript)] string script)
3638
{
3739
this.Driver = driver ?? throw new ArgumentNullException(nameof(driver));
3840
this.Script = script ?? throw new ArgumentNullException(nameof(script));

dotnet/src/support/Extensions/WebDriverExtensions.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
// </copyright>
1919

2020
using System;
21+
using System.Diagnostics.CodeAnalysis;
2122
using System.Reflection;
23+
using OpenQA.Selenium.Internal;
2224

2325
namespace OpenQA.Selenium.Support.Extensions;
2426

@@ -71,7 +73,7 @@ public static Screenshot TakeScreenshot(this IWebDriver driver)
7173
/// <param name="args">The arguments to the script.</param>
7274
/// <exception cref="WebDriverException">Thrown if this <see cref="IWebDriver"/> instance
7375
/// does not implement <see cref="IJavaScriptExecutor"/></exception>
74-
public static void ExecuteJavaScript(this IWebDriver driver, string script, params object?[] args)
76+
public static void ExecuteJavaScript(this IWebDriver driver, [StringSyntax(StringSyntaxConstants.JavaScript)] string script, params object?[] args)
7577
{
7678
ExecuteJavaScriptInternal(driver, script, args);
7779
}
@@ -87,7 +89,7 @@ public static void ExecuteJavaScript(this IWebDriver driver, string script, para
8789
/// <exception cref="WebDriverException">Thrown if this <see cref="IWebDriver"/> instance
8890
/// does not implement <see cref="IJavaScriptExecutor"/>, or if the actual return type
8991
/// of the JavaScript execution does not match the expected type.</exception>
90-
public static T? ExecuteJavaScript<T>(this IWebDriver driver, string script, params object?[] args)
92+
public static T? ExecuteJavaScript<T>(this IWebDriver driver, [StringSyntax(StringSyntaxConstants.JavaScript)] string script, params object?[] args)
9193
{
9294
var value = ExecuteJavaScriptInternal(driver, script, args);
9395
if (value == null)

dotnet/src/support/Selenium.WebDriver.Support.csproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,10 @@
4040
<ProjectReference Include="$(CsprojIncludePath)\Selenium.WebDriver.csproj" />
4141
</ItemGroup>
4242

43+
<ItemGroup>
44+
<!--Workaround for being unable to have two different types of the same name in WebDriver and in Support, despite both being internal-->
45+
<Compile Include="$(CsprojIncludePath)\Internal\StringSyntaxAttribute.cs" />
46+
<Compile Include="$(CsprojIncludePath)\Internal\StringSyntaxConstants.cs" />
47+
</ItemGroup>
48+
4349
</Project>

dotnet/src/webdriver/BUILD.bazel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ load(
1212

1313
exports_files([
1414
"WebDriver.csproj",
15+
"Internal/StringSyntaxAttribute.cs",
16+
"Internal/StringSyntaxConstants.cs",
1517
])
1618

1719
generated_assembly_info(

dotnet/src/webdriver/DevTools/JavaScript.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
// </copyright>
1919

2020
using System;
21+
using System.Diagnostics.CodeAnalysis;
2122
using System.Threading.Tasks;
23+
using OpenQA.Selenium.Internal;
2224

2325
namespace OpenQA.Selenium.DevTools;
2426

@@ -85,7 +87,7 @@ public abstract class JavaScript
8587
/// </summary>
8688
/// <param name="script">The script to add to be evaluated when a new document is opened.</param>
8789
/// <returns>A task that represents the asynchronous operation. The task result contains the internal ID of the script.</returns>
88-
public abstract Task<string> AddScriptToEvaluateOnNewDocument(string script);
90+
public abstract Task<string> AddScriptToEvaluateOnNewDocument([StringSyntax(StringSyntaxConstants.JavaScript)] string script);
8991

9092
/// <summary>
9193
/// Removes a JavaScript snippet from evaluate when a new document is opened.
@@ -103,7 +105,7 @@ public abstract class JavaScript
103105
/// This method is internal to the operation of pinned scripts in Selenium, and
104106
/// is therefore internal by design.
105107
/// </remarks>
106-
internal abstract Task Evaluate(string script);
108+
internal abstract Task Evaluate([StringSyntax(StringSyntaxConstants.JavaScript)] string script);
107109

108110
/// <summary>
109111
/// Raises the BindingCalled event.

dotnet/src/webdriver/IJavaScriptEngine.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919

2020
using System;
2121
using System.Collections.Generic;
22+
using System.Diagnostics.CodeAnalysis;
2223
using System.Threading.Tasks;
24+
using OpenQA.Selenium.Internal;
2325

2426
namespace OpenQA.Selenium;
2527

@@ -88,7 +90,7 @@ public interface IJavaScriptEngine : IDisposable
8890
/// <param name="script">The JavaScript to be loaded on every page.</param>
8991
/// <returns>A task containing an <see cref="InitializationScript"/> object representing the script to be loaded on each page.</returns>
9092
/// <exception cref="ArgumentNullException">If <paramref name="scriptName"/> or <paramref name="script"/> are <see langword="null"/>.</exception>
91-
Task<InitializationScript> AddInitializationScript(string scriptName, string script);
93+
Task<InitializationScript> AddInitializationScript(string scriptName, [StringSyntax(StringSyntaxConstants.JavaScript)] string script);
9294

9395
/// <summary>
9496
/// Asynchronously removes JavaScript from being loaded on every document load.
@@ -112,7 +114,7 @@ public interface IJavaScriptEngine : IDisposable
112114
/// <param name="script">The JavaScript to pin</param>
113115
/// <returns>A task containing a <see cref="PinnedScript"/> object to use to execute the script.</returns>
114116
/// <exception cref="ArgumentNullException">If <paramref name="script"/> is <see langword="null"/>.</exception>
115-
Task<PinnedScript> PinScript(string script);
117+
Task<PinnedScript> PinScript([StringSyntax(StringSyntaxConstants.JavaScript)] string script);
116118

117119
/// <summary>
118120
/// Unpins a previously pinned script from the browser.

dotnet/src/webdriver/IJavascriptExecutor.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
using System;
2121
using System.Collections.Generic;
22+
using System.Diagnostics.CodeAnalysis;
23+
using OpenQA.Selenium.Internal;
2224

2325
namespace OpenQA.Selenium;
2426

@@ -62,7 +64,7 @@ public interface IJavaScriptExecutor
6264
/// variable, as if the function were called via "Function.apply"
6365
/// </para>
6466
/// </remarks>
65-
object? ExecuteScript(string script, params object?[] args);
67+
object? ExecuteScript([StringSyntax(StringSyntaxConstants.JavaScript)] string script, params object?[] args);
6668

6769
/// <summary>
6870
/// Executes JavaScript in the context of the currently selected frame or window.
@@ -108,5 +110,5 @@ public interface IJavaScriptExecutor
108110
/// <param name="script">The JavaScript code to execute.</param>
109111
/// <param name="args">The arguments to the script.</param>
110112
/// <returns>The value returned by the script.</returns>
111-
object? ExecuteAsyncScript(string script, params object?[] args);
113+
object? ExecuteAsyncScript([StringSyntax(StringSyntaxConstants.JavaScript)] string script, params object?[] args);
112114
}

0 commit comments

Comments
 (0)