mirror of
https://github.com/github/codeql.git
synced 2025-12-17 01:03:14 +01:00
124 lines
2.9 KiB
JavaScript
124 lines
2.9 KiB
JavaScript
function removeX(string) {
|
|
let parts = string.split('/');
|
|
for (let i = 0; i < parts.length; ++i) {
|
|
if (parts[i] === 'X') parts.splice(i, 1); // NOT OK
|
|
}
|
|
return parts.join('/');
|
|
}
|
|
|
|
function removeXInnerLoop(string, n) {
|
|
let parts = string.split('/');
|
|
for (let j = 0; j < n; ++j) {
|
|
for (let i = 0; i < parts.length; ++i) {
|
|
if (parts[i] === 'X') parts.splice(i, 1); // NOT OK
|
|
}
|
|
}
|
|
return parts.join('/');
|
|
}
|
|
|
|
function removeXOuterLoop(string, n) {
|
|
let parts = string.split('/');
|
|
for (let i = 0; i < parts.length; ++i) {
|
|
for (let j = 0; j < n; ++j) {
|
|
if (parts[i] === 'X') {
|
|
parts.splice(i, 1); // NOT OK
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return parts.join('/');
|
|
}
|
|
|
|
function decrementAfter(string) {
|
|
let parts = string.split('/');
|
|
for (let i = 0; i < parts.length; ++i) {
|
|
if (parts[i] === 'X') {
|
|
parts.splice(i, 1); // OK
|
|
--i;
|
|
}
|
|
}
|
|
return parts.join('/');
|
|
}
|
|
|
|
function postDecrementArgument(string) {
|
|
let parts = string.split('/');
|
|
for (let i = 0; i < parts.length; ++i) {
|
|
if (parts[i] === 'X') {
|
|
parts.splice(i--, 1); // OK
|
|
}
|
|
}
|
|
return parts.join('/');
|
|
}
|
|
|
|
|
|
function breakAfter(string) {
|
|
let parts = string.split('/');
|
|
for (let i = 0; i < parts.length; ++i) {
|
|
if (parts[i] === 'X') {
|
|
parts.splice(i, 1); // OK - only removes first occurrence
|
|
break;
|
|
}
|
|
}
|
|
return parts.join('/');
|
|
}
|
|
|
|
function insertNewElements(string) {
|
|
let parts = string.split('/');
|
|
for (let i = 0; i < parts.length; ++i) {
|
|
if (parts[i] === 'X') {
|
|
parts.splice(i, 1, '.'); // OK - no shifting due to insert
|
|
}
|
|
}
|
|
return parts.join('/');
|
|
}
|
|
|
|
function spliceAfterLoop(string) {
|
|
let parts = string.split('/');
|
|
let i = 0;
|
|
for (; i < parts.length; ++i) {
|
|
if (parts[i] === 'X') break;
|
|
}
|
|
if (parts[i] === 'X') {
|
|
parts.splice(i, 1); // OK - not inside loop
|
|
}
|
|
return parts.join('/');
|
|
}
|
|
|
|
function spliceAfterLoopNested(string) {
|
|
let parts = string.split('/');
|
|
for (let j = 0; j < parts.length; ++j) {
|
|
let i = j;
|
|
for (; i < parts.length; ++i) {
|
|
if (parts[i] === 'X') break;
|
|
}
|
|
parts.splice(i, 1); // OK - not inside 'i' loop
|
|
}
|
|
return parts.join('/');
|
|
}
|
|
|
|
function removeAtSpecificPlace(string, k) {
|
|
let parts = string.split('/');
|
|
for (let i = 0; i < parts.length; ++i) {
|
|
if (i === k && parts[i] === 'X') parts.splice(i, 1); // OK - more complex logic
|
|
}
|
|
return parts.join('/');
|
|
}
|
|
|
|
function removeFirstAndLast(string) {
|
|
let parts = string.split('/');
|
|
for (let i = 0; i < parts.length; ++i) {
|
|
if (i === 0 || i === parts.length - 1) parts.splice(i, 1); // OK - out of scope of this query
|
|
}
|
|
return parts.join('/');
|
|
}
|
|
|
|
function inspectNextElement(string) {
|
|
let parts = string.split('/');
|
|
for (let i = 0; i < parts.length; ++i) {
|
|
if (i < parts.length - 1 && parts[i] === parts[i + 1]) {
|
|
parts.splice(i, 1); // OK - next element has been looked at
|
|
}
|
|
}
|
|
return parts.join('/');
|
|
}
|